主要内容

optimeq

创建空优化平等数组

描述

optimeq初始化一组相等表达式。

小费

有关完整的工作流程,请参见基于问题的优化工作流程基于问题的解决方程的工作流程

例子

eq.= OPTIMEQ(N创造一个N- 1个空的优化等式数组。用eq.初始化创建平等的循环。在优化问题中使用产生的相位作为约束,或者在方程问题中的等式。

例子

eq.= OPTIMEQ(Cstr.创建一个空优化等式的数组Cstr.,由字符向量或字符串向量组成的单元格数组。

如果Cstr.是1-by-NCstr.,在那里NCstr.是元素的数量Cstr., 然后eq.也是1-by-NCstr.。否则,eq.NCstr.1。

eq.= OPTIMEQ(Cstr.1,N2……Cstr.k)eq.= OPTIMEQ({Cstr.1,Cstr.2……Cstr.k})eq.= optimeq ([N1,N2……Nk),任何组合Cstr.N参数,创建一个NCstr.1 -N2 -…——-NCstr.k阵列空优化平等,在哪里NCstr.元素的个数是多少Cstr.

例子

全部折叠

为库存模型创建相等约束。每个时期初期的存货量等于上一个时期末的存货量。在每个时期,股票增加和减少出售。变量股票是期末的股票。

N = 12;股票= optimvar (“股票”,n,1,“类型”“整数”'indowbound',0);购买= Optimvar(“买入”,n,1,“类型”“整数”'indowbound',0);卖= Optimvar('卖',n,1,“类型”“整数”'indowbound',0);initialStock = 100;Stockbalance = Optimeq(N,1);为了t = 1:n如果t == 1 Enterstock = InitialStock;其他的Enterstock =库存(T-1);结尾存货余额(t) = stock(t) == enterstock + buy(t) - sell(t);结尾显示(stockbalance)
(1,1) - (1)+销售(1)+库存(1)== 100(2,1)-Buy(2)+销售(2) - 库存(1)+库存(2)==0(3,1)-Buy(3)+销售(3) - 库存(2)+库存(3)== 0(4,1) - (4)+卖出(4) - 库存(3)+库存(4)== 0(5,1)-Buy(5)+销售(5) - 库存(4)+库存(5)== 0(6,1) - 布布(6)+卖(6)- 股票(5)+库存(6)== 0(7,1)-Buy(7)+销售(7) - 库存(6)+库存(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

包括优化问题中的约束。

prob = OptimProblem;prob.constraints.stockbalance = StockPalance;

您可以通过对变量使用矩阵操作来创建相同的约束,而不是使用循环。

Stockbalance2 = optimeq(12, 1);t = 2:12;Stockbalance2 (t) = stock(t) == stock(t-1) + buy(t) - sell(t);Stockbalance2 (1) = stock(1) == initialstock + buy(1) - sell(1);

显示新的约束。注意,它们与中的约束相同Stockbalance.

显示(stockbalance2)
(1,1) - (1)+销售(1)+库存(1)== 100(2,1)-Buy(2)+销售(2) - 库存(1)+库存(2)==0(3,1)-Buy(3)+销售(3) - 库存(2)+库存(3)== 0(4,1) - (4)+卖出(4) - 库存(3)+库存(4)== 0(5,1)-Buy(5)+销售(5) - 库存(4)+库存(5)== 0(6,1) - 布布(6)+卖(6)- 股票(5)+库存(6)== 0(7,1)-Buy(7)+销售(7) - 库存(6)+库存(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

通过使用矩阵操作,循环中的创建约束可以比创建约束更耗时。

为涉及机场间货物运输的问题创建索引等式。首先,创建代表机场的指数。

机场= [“松懈”“jfk”“ord”];

创建代表商品的指数从一个机场发货到另一个机场。

商品= [“电子产品”“食品”“衣服”“原料”];

创建一个阵列,给出了每单位货物的重量。

权重= [1 20 5 100];

创建一个变量数组,表示从每个机场运送到彼此机场的货物数量。数量(airport1 airport2、货物)代表数量商品发货airport1airport2

数量= Optimvar('数量'、机场、机场、货物、'indowbound',0);

创建一个相等约束,使从每个机场装运的货物的重量之和等于装运到机场的货物的重量之和。

eq = Optimeq(机场);Outweight = Optimexpr(大小(eq));Inweight = Optimexpr(大小(eq));为了i = 1:长度(机场)temp = Optimexpr;temp2 = Optimexpr;为了J = 1:长度(机场)为了k = 1:长度(商品)TEMP = TEMP +数量(I,J,K)*重量(k);temp2 = temp2 +数量(j,i,k)*权重(k);结尾结尾超重(i)= temp;超重(i)= temp2;eq(i)=超重(i)==超重(i);结尾

检查平等。

显示(eq)
(1,'LAX') -  Quanties('JFK','LAX','电子) - 数量('ORD','LAX','电子)+数量('LAX','JFK','电子)')+数量('LAX','ORD','Electronics') -  20 *数量('JFK','LAX','FoodStuffs') -  20 *数量('ORD','LAX','FOODSTUFF'','FOODSTUFF'))+ 20 *数量('LAX','JFK','FoodStuffs')+ 20 *数量('LAX','ORD','FoodStuffs') -  5 *数量('JFK','LAX','服装'') -  5 *数量('ORD','LAX','服装')+ 5 *数量('LAX','JFK','服装')+ 5 *数量('LAX','ORD','服装') -  100 *数量('JFK','LAX','原料') -  100 *数量('ORD','LAX','RAP')+ 100 *数量('LAX','JFK','原材料')+ 100 *数量('LAX','ORD','原材料')== 0(1,'JFK')数量('JFK','LAX','Electronics') -数量('LAX','JFK','电子产品') - 数量('ORD','JFK','电子产品')+数量('JFK','ORD','Electronics')+ 20 *数量('JFK','LAX','FoodStuffs') -  20 *数量('LAX','JFK','FoodStuffs') -  20 *数量('ORD)','JFK','FoodStuffs')+ 20 *数量('JFK','ORD','FoodStuffs')+ 5 *数量('JFK','LAX','服装') -  5 *数量('LAX','JFK','服装') -  5 *数量('ORD','JFK','服装')+ 5 *数量('JFK','ORD','服装')+ 100 *数量('JFK','LAX','原材料') -  100 *数量('LAX','JFK','原材料') -  100 *数量('ORD','JFK','原料')+100 *数量('JFK','ORD','原材料')== 0(1,'ORD')数量('ORD','LAX','电子)+数量('ORD','JFK' '电子') - 的数量( '洛杉矶', 'ORD', '电子') - 的数量( 'JFK', 'ORD', '电子')+ 20倍*量( 'ORD', '洛杉矶','食品+ 20 *数量('ORD','JFK','FoodStuffs') -  20 *数量('LAX','ORD','FoodStuffs') -  20 *数量('JFK','ORD',“食品”)+ 5 *数量('ORD','LAX','服装')+ 5 *数量('ORD','JFK','服装') -  5 *数量('LAX','ORD','服装') -  5 *数量('JFK','ORD','服装')+ 100 *数量('ORD','LAX','RAX','原材料')+ 100 *数量('ORD','JFK','原料') -  100 *数量('LAX','ORD','原料') -  100 *数量('JFK','ORD','原料')== 0.

避免嵌套为了循环,使用标准MATLAB®运算符表示平衡。通过在抵达机场指数上求和来创建出发量的阵列。挤压结果以删除单身尺寸。

离开=挤压(总和(数量,2));

计算离开量的权重。

截止重量=离开*权重';

同样,计算到达量的权重。

到达=挤压(sum(数量、1));arriveweights =到达*权重”;

创建离去权重等于到达权重的约束。

Eq2 = departweights == arriveweights;

属性包含等式的适当索引名IndexNames财产。

eq2.indexnames = {airports,{}};

显示新的平等。请注意,它们与先前的等于相同,而是转换向量。

展示(EQ2)
('LAX',1) -  Quanties('JFK','LAX','电子产品') - 数量('ORD','LAX','Electronics')+数量('LAX','JFK','电子)')+数量('LAX','ORD','Electronics') -  20 *数量('JFK','LAX','FoodStuffs') -  20 *数量('ORD','LAX','FOODSTUFF'','FOODSTUFF'))+ 20 *数量('LAX','JFK','FoodStuffs')+ 20 *数量('LAX','ORD','FoodStuffs') -  5 *数量('JFK','LAX','服装'') -  5 *数量('ORD','LAX','服装')+ 5 *数量('LAX','JFK','服装')+ 5 *数量('LAX','ORD','服装') -  100 *数量('JFK','LAX','原料') -  100 *数量('ORD','LAX','RAP')+ 100 *数量('LAX','JFK','原材料')+ 100 *数量('LAX','ORD','原料')== 0('JFK',1)数量('JFK','LAX','Electronics') -数量('LAX','JFK','电子产品') - 数量('ORD','JFK','电子产品')+数量('JFK','ORD','Electronics')+ 20 *数量('JFK','LAX','FoodStuffs') -  20 *数量('LAX','JFK','FoodStuffs') -  20 *数量('ORD)','JFK','FoodStuffs')+ 20 *数量('JFK','ORD','FoodStuffs')+ 5 *数量('JFK','LAX','服装') -  5 *数量('LAX','JFK','服装') -  5 *数量('ORD','JFK','服装')+ 5 *数量('JFK','ORD','服装')+ 100 *数量('JFK','LAX','原材料') -  100 *数量('LAX','JFK','原材料') -  100 *数量('ORD','JFK','原料')+100 *数量('JFK','ORD','原材料')== 0('ORD',1)数量('ORD','LAX','Electronics')+数量('ORD','JFK' '电子') - 的数量( '洛杉矶', 'ORD', '电子') - 的数量( 'JFK', 'ORD', '电子')+ 20倍*量( 'ORD', '洛杉矶','食品+ 20 *数量('ORD','JFK','FoodStuffs') -  20 *数量('LAX','ORD','FoodStuffs') -  20 *数量('JFK','ORD',“食品”)+ 5 *数量('ORD','LAX','服装')+ 5 *数量('ORD','JFK','服装') -  5 *数量('LAX','ORD','服装') -  5 *数量('JFK','ORD','服装')+ 100 *数量('ORD','LAX','RAX','原材料')+ 100 *数量('ORD','JFK','原料') -  100 *数量('LAX','ORD','原料') -  100 *数量('JFK','ORD','原料')== 0.

通过使用矩阵操作,循环中的创建约束可以比创建约束更耗时。

输入参数

全部折叠

约束尺寸的大小,指定为正整数。

  • 的大小若干= optimeq (N)N1。

  • 的大小若干= optimeq (N1、N2)N1——- - - - - -N2

  • 的大小CONSTRIC = OPTIMEQ(N1,N2,...,NK)N1——- - - - - -N2-By -...-Nk

例子:5.

数据类型:

索引的名称,指定为字符向量或字符串向量的单元格数组。

例子:{“红色”、“橙”、“绿色”、“蓝”}

例子:[“红色”;“橙色”;“绿色”;“蓝色”]

数据类型:细绳|细胞

输出参数

全部折叠

平等,作为空的返回OptimizationEquality数组中。用eq.初始化创建平等的循环。

例如:

x = Optimvar(“x”,8);eq = OPTIMEQ(4);为了k = 1:4 eq(k)= 5 * k *(x(2 * k) -  x(2 * k-1))== 10  -  2 * k;结尾

提示

  • 您可以使用optimconstr代替optimeq为方程问题的优化问题或方程创建平等约束。

在R2019B中介绍