Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

optimconstr

Cree una matriz de restricción de optimización vacía

Descripción

ejemplo

constr = optimconstr(N) crea un array-by-1 de restricciones de optimización vacías.N Se usa para inicializar un bucle que crea expresiones de restricción.constr

ejemplo

constr = optimconstr(cstr) crea una matriz de restricciones de optimización vacías que se indexan mediante la matriz de vectores de caracteres o vectores de cadena de celdas.cstr

Si es 1 por-, donde está el número de elementos de, entonces también es 1-por-.cstrncstrncstrcstrconstrncstr De lo contrario, es-por-1.constrncstr

constr = optimconstr(cstr1,N2,...,cstrk) O constr = optimconstr({cstr1,cstr2,...,cstrk}) O constr = optimconstr([N1,N2,...,Nk]), para cualquier combinación de y argumentos, crea un 1-por-2-por-...-matriz by-k de restricciones de optimización vacías, donde es el número de elementos en.cstrNncstrNncstrncstrcstr

Ejemplos

contraer todo

Cree restricciones para un modelo de inventario. El stock de mercancías al inicio de cada período es igual al stock al final del período anterior. Durante cada período, la acción aumenta y disminuye.buysell La variable es el stock al final del período.stock

N = 12; stock = optimvar('stock',N,1,'Type','integer','LowerBound',0); buy = optimvar('buy',N,1,'Type','integer','LowerBound',0); sell = optimvar('sell',N,1,'Type','integer','LowerBound',0); initialstock = 100;  stockbalance = optimconstr(N,1);  for t = 1:N     if t == 1         enterstock = initialstock;     else         enterstock = stock(t-1);     end     stockbalance(t) = stock(t) == enterstock + buy(t) - sell(t); end  showconstr(stockbalance) 
 (1, 1)    -buy(1) + sell(1) + stock(1) == 100  (2, 1)    -buy(2) + sell(2) - stock(1) + stock(2) == 0  (3, 1)    -buy(3) + sell(3) - stock(2) + stock(3) == 0  (4, 1)    -buy(4) + sell(4) - stock(3) + stock(4) == 0  (5, 1)    -buy(5) + sell(5) - stock(4) + stock(5) == 0  (6, 1)    -buy(6) + sell(6) - stock(5) + stock(6) == 0  (7, 1)    -buy(7) + sell(7) - stock(6) + stock(7) == 0  (8, 1)    -buy(8) + sell(8) - stock(7) + stock(8) == 0  (9, 1)    -buy(9) + sell(9) - stock(8) + stock(9) == 0  (10, 1)    -buy(10) + sell(10) - stock(9) + stock(10) == 0  (11, 1)    -buy(11) + sell(11) - stock(10) + stock(11) == 0  (12, 1)    -buy(12) + sell(12) - stock(11) + stock(12) == 0  

Incluya las restricciones en un problema.

prob = optimproblem; prob.Constraints.stockbalance = stockbalance; 

En lugar de usar un bucle, puede crear las mismas restricciones mediante el uso de operaciones de matriz en las variables.

tt = ones(N-1,1); d = diag(tt,-1); % shift index by -1 stockbalance2 = stock == d*stock + buy - sell; stockbalance2(1) = stock(1) == initialstock + buy(1) - sell(1); 

Vea que las nuevas restricciones son las mismas que las restricciones en:stockbalance

showconstr(stockbalance2) 
 (1, 1)    -buy(1) + sell(1) + stock(1) == 100  (2, 1)    -buy(2) + sell(2) - stock(1) + stock(2) == 0  (3, 1)    -buy(3) + sell(3) - stock(2) + stock(3) == 0  (4, 1)    -buy(4) + sell(4) - stock(3) + stock(4) == 0  (5, 1)    -buy(5) + sell(5) - stock(4) + stock(5) == 0  (6, 1)    -buy(6) + sell(6) - stock(5) + stock(6) == 0  (7, 1)    -buy(7) + sell(7) - stock(6) + stock(7) == 0  (8, 1)    -buy(8) + sell(8) - stock(7) + stock(8) == 0  (9, 1)    -buy(9) + sell(9) - stock(8) + stock(9) == 0  (10, 1)    -buy(10) + sell(10) - stock(9) + stock(10) == 0  (11, 1)    -buy(11) + sell(11) - stock(10) + stock(11) == 0  (12, 1)    -buy(12) + sell(12) - stock(11) + stock(12) == 0  

La creación de restricciones en un bucle puede consumir más tiempo que la creación de restricciones por operaciones de matriz. Sin embargo, es menos probable que cree una restricción errónea mediante bucles.

Crea restricciones y variables indexadas para representar las calorías consumidas en una dieta. Cada comida tiene un límite de calorías diferente.

meals = ["breakfast","lunch","dinner"]; constr = optimconstr(meals); foods = ["cereal","oatmeal","yogurt","peanut butter sandwich","pizza","hamburger",...     "salad","steak","casserole","ice cream"]; diet = optimvar('diet',foods,meals,'LowerBound',0); calories = [200,175,150,450,350,800,150,650,350,300]'; for i = 1:3     constr(i) = diet(:,i)'*calories <= 250*i; end

Compruebe la restricción para.dinner

showconstr(constr("dinner"))
  200*diet('cereal', 'dinner') + 175*diet('oatmeal', 'dinner') + 150*diet('yogurt', 'dinner') + 450*diet('peanut butter sandwich', 'dinner') + 350*diet('pizza', 'dinner') + 800*diet('hamburger', 'dinner') + 150*diet('salad', 'dinner') + 650*diet('steak', 'dinner') + 350*diet('casserole', 'dinner') + 300*diet('ice cream', 'dinner') <= 750 

Argumentos de entrada

contraer todo

Tamaño de la cota de restricción, especificada como un entero positivo.

  • El tamaño de is-by-1.constr = optimconstr(N)N

  • El tamaño es-por-.constr = optimconstr(N1,N2)N1N2

  • El tamaño de es-por--por-...-por-.constr = optimconstr(N1,N2,...,Nk)N1N2Nk

Ejemplo: 5

Tipos de datos: double

Nombres para la indexación, especificados como una matriz de celdas de matrices de caracteres o como una matriz de cadenas.

Ejemplo: {'red','orange','green','blue'}

Ejemplo: ["red";"orange";"green";"blue"]

Tipos de datos: string | cell

Argumentos de salida

contraer todo

Restricciones, devueltas como una matriz vacía.OptimizationConstraint Se usa para inicializar un bucle que crea expresiones de restricción.constr

Por ejemplo,

x = optimvar('x',8); constr = optimconstr(4); for k = 1:4     constr(k) = 5*k*(x(2*k) - x(2*k-1)) <= 10 - 2*k; end

Limitaciones

  • Cada expresión de restricción en un problema debe usar la misma comparación. Por ejemplo, el código siguiente lleva a un error, porque usa la comparación, usa la comparación y se encuentra en la misma expresión.cons1<=cons2>=cons1cons2

    prob = optimproblem; x = optimvar('x',2,'LowerBound',0); cons1 = x(1) + x(2) <= 10; cons2 = 3*x(1) + 4*x(2) >= 2; prob.Constraints = [cons1;cons2]; % This line throws an error

    Puede evitar este error utilizando expresiones separadas para las restricciones.

    prob.Constraints.cons1 = cons1; prob.Constraints.cons2 = cons2;

Sugerencias

Introducido en R2017b