主要内容

optimeq

创建空优化相等数组

描述

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

提示

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

例子

情商= optimeq (N创建一个N空优化等式的-by-1数组。使用情商初始化一个创建等式的循环。将得到的等式用作优化问题中的约束条件,或用作方程问题中的方程。

例子

情商= optimeq (装运箱创建一个空优化等式数组,其索引为装运箱,字符向量或字符串向量的单元格数组。

如果装运箱是1 -n装运箱,在那里n装运箱元素的个数是多少装运箱,然后情商也是1-by-n装运箱.否则,情商n装运箱1。

情商= optimeq (装运箱1,N2……装运箱k)情商= optimeq ({装运箱1,装运箱2……装运箱k})情商= optimeq ([N1,N2……Nk)的任意组合装运箱而且N参数,创建n装运箱1 -N2 -…——-n装运箱K数组的空优化等式,其中n装运箱元素的个数是多少装运箱

例子

全部折叠

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

N = 12;股票= optimvar(“股票”N 1“类型”“整数”下界的, 0);购买= optimvar(“买入”N 1“类型”“整数”下界的, 0);卖出= optimvar(“卖出”N 1“类型”“整数”下界的, 0);Initialstock = 100;股票余额= optimeq(N,1);t = 1:N如果T == 1 enterstock = initialstock;其他的Enterstock =股票(t-1);结束股票余额(t) =股票(t) =企业股票+买入(t) -卖出(t);结束显示(stockbalance)
(1,1)购买(1)+卖出股票(1)= =(1)+ 100(2,1)购买(2)+(2)-(1)+股票出售股票(2)= = 0(3,1)购买(3)+(3)出售-股票(2)+股票(3)= = 0(4,1)购买(4)+(4)出售-股票(3)+股票(4)= = 0(5、1)购买(5)+销售(5)-股票(4)+股票(5)= = 0(6,1)购买(6)+销售(6)-股票(5)+股票(6)= = 0(7日1)购买(7)+销售(7)-股票(6)+股票(7)= = 0(8,1)购买(8)+销售(8)-股票(7)+股票(8)= = 0(9,1)购买(9)+销售(9)-股票(8)+股票(9)= = 0 (10,1) -买入(10)+卖出(10)-股票(9)+股票(10)== 0(11,1)-买入(11)+卖出(11)-股票(10)+股票(11)== 0(12,1)-买入(12)+卖出(12)-股票(11)+股票(12)== 0

在优化问题中包含约束条件。

Prob =优化问题;probv . constraints .stockbalance =股票平衡;

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

Stockbalance2 = optimeq(12,1);T = 2:12;Stockbalance2 (t) =股票(t) =股票(t-1) +买入(t) -卖出(t);Stockbalance2 (1) = stock(1) = initialstock + buy(1) - sell(1);

显示新的约束。注意,它们与中的约束条件相同stockbalance

显示(stockbalance2)
(1,1)购买(1)+卖出股票(1)= =(1)+ 100(2,1)购买(2)+(2)-(1)+股票出售股票(2)= = 0(3,1)购买(3)+(3)出售-股票(2)+股票(3)= = 0(4,1)购买(4)+(4)出售-股票(3)+股票(4)= = 0(5、1)购买(5)+销售(5)-股票(4)+股票(5)= = 0(6,1)购买(6)+销售(6)-股票(5)+股票(6)= = 0(7日1)购买(7)+销售(7)-股票(6)+股票(7)= = 0(8,1)购买(8)+销售(8)-股票(7)+股票(8)= = 0(9,1)购买(9)+销售(9)-股票(8)+股票(9)= = 0 (10,1) -买入(10)+卖出(10)-股票(9)+股票(10)== 0(11,1)-买入(11)+卖出(11)-股票(10)+股票(11)== 0(12,1)-买入(12)+卖出(12)-股票(11)+股票(12)== 0

在循环中创建约束比使用矩阵操作创建约束更耗时。

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

机场= [“宽松”“肯尼迪”“奥德”];

创建代表从一个机场运往另一个机场的货物的指数。

货物= [“电子”“食品”“衣服”“原材料”];

创建一个数组,给出每个单位货物的重量。

权重= [1 20 5 100];

创建一个变量数组,表示从每个机场运往另一个机场的货物数量。数量(airport1 airport2、货物)表示的数量货物airport1airport2

数量= optimvar(“数量”、机场、机场、货物、下界的, 0);

创建一个相等的约束条件,即从每个机场运送的货物重量之和等于运送到该机场的货物重量之和。

Eq = optimeq(机场);Outweight = optimexpr(大小(eq));Inweight = optimexpr(大小(eq));I = 1:length(airports) 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) = outweight(i) = inweight(i);结束

检查等式。

显示(eq)
(“宽松”)数量(“肯尼迪”,“松懈”,“电子”)——数量(“奥德”、“松懈”,“电子”)+数量(“松懈”,“肯尼迪”,“电子”)+数量(“松懈”,“奥德”,“电子”)- 20 *数量(“肯尼迪”,“松懈”,“食品”)- 20 *数量(“奥德”、“松懈”,“食品”)+ 20 *数量(“松懈”,“肯尼迪”,“食品”)+ 20 *数量(“松懈”,“奥德”,“食品”)- 5 *数量(“肯尼迪”,“松懈”,“衣服”)- 5 *数量(“奥德”、“松懈”,“衣服”)+ 5 *数量(“松懈”,“肯尼迪”,“衣服”)+ 5 *数量(“松懈”,“奥德”、“服装”)- 100 *数量(“肯尼迪”,“松懈”,“原材料”)- 100 *数量(“奥德”、“松懈”,“原材料”)+ 100 *数量(“松懈”,“肯尼迪”,“原材料”)+ 100 *数量(“松懈”,“奥德”,“原材料”)= = 0(1,“肯尼迪”)数量(“肯尼迪”,“松懈”,“电子”)——数量(“松懈”,“肯尼迪”,“电子”)——数量(“奥德”、“肯尼迪”,“电子”)+数量(“肯尼迪”,“奥德”,“电子”)+ 20 *数量(“肯尼迪”,“松懈”,“食品”)- 20 *数量(“松懈”,“肯尼迪”,'食品')- 20*数量('ORD', 'JFK', '食品')+ 20*数量('JFK', 'ORD', '食品')+ 5*数量('JFK', 'JFK', '服装')- 5*数量('ORD', 'JFK', '服装')+ 100*数量('JFK', 'ORD', '原材料')- 100*数量('ORD', 'JFK', '原材料')+ 100*数量('JFK', 'ORD', '原材料')== 0 (1,'ORD')数量('ORD', 'ORD', 'LAX')“电子”)+数量(“奥德”、“肯尼迪”、“电子”)——数量(“松懈”,“奥德”,“电子”)——数量(“肯尼迪”,“奥德”,“电子”)+ 20 *数量(“奥德”、“松懈”,“食品”)+ 20 *数量(“奥德”、“肯尼迪”、“食品”)- 20 *数量(“松懈”,“奥德”、“食品”)- 20 *数量(“肯尼迪”,“奥德”,“食品”)+ 5 *数量(“奥德”、“松懈”,“衣服”)+ 5 *数量(“奥德”、“肯尼迪”、“服装”)- 5 *数量(“松懈”,“奥德”,“衣服”)- 5 *数量(“肯尼迪”,“奥德”,'服装')+ 100*数量('ORD', 'LAX', '原材料')+ 100*数量('ORD', 'JFK', '原材料')- 100*数量('LAX', 'ORD', '原材料')- 100*数量('JFK', 'ORD', '原材料')== 0

避免嵌套循环,用标准的MATLAB®运算符表示等式。通过对到达机场指数求和来创建出发数量数组。压缩结果以删除单个维度。

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

计算离开量的权重。

出发重量=出发*重量';

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

到达=挤压(sum(数量,1));到达权重=到达*权重';

创建约束条件,使离开的权重等于到达的权重。

Eq2 = departweights == arrival weights;

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

eq2。IndexNames = {airports,{}};

显示新的等式。注意,它们与前面的等式相匹配,但都是转置向量。

显示(eq2)
(“松懈”,1)数量(“肯尼迪”、“松懈”,“电子”)——数量(“奥德”、“松懈”,“电子”)+数量(“松懈”,“肯尼迪”,“电子”)+数量(“松懈”,“奥德”,“电子”)- 20 *数量(“肯尼迪”、“宽松”、“食品”)- 20 *数量(“奥德”、“松懈”,“食品”)+ 20 *数量(“松懈”,“肯尼迪”、“食品”)+ 20 *数量(“松懈”,“奥德”、“食品”)- 5 *数量(“肯尼迪”、“松懈”,“衣服”)- 5 *数量(“奥德”、“松懈”,“衣服”)+ 5 *数量(“松懈”,“肯尼迪”、“服装”)+ 5 *数量(“松懈”,'ORD', '服装')- 100*数量('JFK', 'LAX', '原材料')- 100*数量('ORD', 'LAX', '原材料')+ 100*数量('LAX', 'JFK', '原材料')== 0 ('JFK', 'LAX', '原材料')-数量('LAX', 'LAX', '电子产品')-数量('ORD', 'JFK', '电子产品')+数量('JFK', 'ORD', '电子产品')+数量('JFK', 'ORD', '电子产品')+数量('JFK', 'LAX', '食品')- 20*数量('JFK', 'LAX', '食品')- 20*数量('LAX', 'LAX', 'JFK', '电子产品')- 20*数量('JFK', 'LAX', '食品')- 20*数量('LAX', 'LAX', 'JFK', '电子产品')'食品')- 20*数量('ORD', 'JFK', '食品')+ 20*数量('JFK', 'ORD', '食品')+ 5*数量('JFK', 'JFK', '服装')- 5*数量('ORD', 'JFK', '服装')+ 100*数量('JFK', 'ORD', '原材料')- 100*数量('ORD', 'JFK', '原材料')+ 100*数量('JFK', 'ORD', '原材料')== 0 ('ORD', 'ORD', '原材料')+ 100*数量('JFK', 'ORD', '原材料')== 0 ('ORD', 'ORD', '原材料')== 0 ('ORD', 'ORD', '原材料')“电子”)+数量(“奥德”、“肯尼迪”、“电子”)——数量(“松懈”,“奥德”,“电子”)——数量(“肯尼迪”,“奥德”,“电子”)+ 20 *数量(“奥德”、“松懈”,“食品”)+ 20 *数量(“奥德”、“肯尼迪”、“食品”)- 20 *数量(“松懈”,“奥德”、“食品”)- 20 *数量(“肯尼迪”,“奥德”,“食品”)+ 5 *数量(“奥德”、“松懈”,“衣服”)+ 5 *数量(“奥德”、“肯尼迪”、“服装”)- 5 *数量(“松懈”,“奥德”,“衣服”)- 5 *数量(“肯尼迪”,“奥德”,'服装')+ 100*数量('ORD', 'LAX', '原材料')+ 100*数量('ORD', 'JFK', '原材料')- 100*数量('LAX', 'ORD', '原材料')- 100*数量('JFK', 'ORD', '原材料')== 0

在循环中创建约束比使用矩阵操作创建约束更耗时。

输入参数

全部折叠

约束维度的大小,指定为正整数。

  • 的大小constr = optimeq(N)N1。

  • 的大小constr = optimeq(N1,N2)N1——- - - - - -N2

  • 的大小constr = optimeq(N1,N2,…,Nk)N1——- - - - - -N2——-…——-Nk

例子:5

数据类型:

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

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

例子:(“红”、“橙色”、“绿色”;“蓝色”)

数据类型:字符串|细胞

输出参数

全部折叠

等式,返回为空OptimizationEquality数组中。使用情商初始化一个创建等式的循环。

例如:

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引入