主要内容

optimeq

创建空优化等式数组

描述

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

提示

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

例子

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

例子

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

如果装运箱是1 -n装运箱,在那里n装运箱元素的个数是装运箱,然后情商也是1 -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;stockbalance = optimeq (N, 1);t = 1: N如果T == 1 enterstock = initialstock;其他的enterstock =股票(t - 1);结束Stockbalance (t) = stock(t) == enterstock + buy(t) - sell(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

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

概率= optimproblem;prob.Constraints.stockbalance = stockbalance;

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

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)购买(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

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

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

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

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

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

创建一个数组,给出每件商品的重量。

Weights = [1 20 5 100];

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

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

创建一个等式约束,即从每个机场发运的货物的重量之和等于运往该机场的货物的重量之和。

情商= optimeq(机场);疗效= optimexpr(大小(eq));inweight = optimexpr(大小(eq));I = 1:length(airports) temp = optimexpr;temp2 = optimexpr;j = 1:长度(机场)K = 1:长度(货物)温度=温度+数量(i,j, K)*重量(K);Temp2 = Temp2 + quantity (j,i,k)*weights(k);结束结束疗效(i) = temp;inweight (i) = temp2;Eq (i) = outweight(i) == inweight(i);结束

检查平等。

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

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

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

计算出发量的权重。

Departweights =离开*权重';

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

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

创建离开权值等于到达权值的约束条件。

Eq2 = departweights == arriveweights;

方法为等式包含适当的索引名IndexNames财产。

eq2。IndexNames ={机场、{}};

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

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

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

输入参数

全部折叠

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

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

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

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

例子:5

数据类型:

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

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

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

数据类型:字符串|细胞

输出参数

全部折叠

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

例如:

x = optimvar (“x”8);情商= optimeq (4);k = 1:4 eq (k) = 5 * k * (x (2 * k) - x (2 * k - 1)) = = 10 - 2 * k;结束

提示

  • 您可以使用optimconstr而不是optimeq为优化问题或方程问题创建等式约束。

版本历史

介绍了R2019b

Baidu
map