主要内容

optimconstr

创建空的优化约束数组

描述

使用optimconstr初始化一组约束表达式。

提示

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

例子

若干= optimconstr (N)创建一个N空优化约束的-by-1数组。使用若干初始化一个创建约束表达式的循环。

例子

若干= optimconstr (装运箱)创建一个由空优化约束组成的数组装运箱,由字符向量或字符串向量组成的单元格数组。

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

若干= optimconstr (装运箱1,N2……装运箱k)若干= optimconstr ({装运箱1,装运箱2……装运箱k})若干= optimconstr ([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 = optimconstr (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)购买(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 (71)购买(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;

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

的tt = (n - 1, 1);d =诊断接头(tt, 1);%移位索引-1Stockbalance2 = stock == d*stock + buy - sell;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 (71)购买(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

在循环中创建约束比通过矩阵操作创建约束更耗时。但是,使用循环创建错误约束的可能性更小。

创建索引约束和变量来表示饮食中消耗的卡路里。每一餐都有不同的卡路里限制。

餐= [“早餐”,“午餐”,“晚餐”];若干= optimconstr(餐);食物= [“麦片”,“燕麦片”,“酸奶”,“花生酱三明治”,“披萨”,“汉堡包”,“沙拉”,“牛排”,“砂锅”,“冰激凌”];饮食= optimvar (“饮食”、食品、膳食费、下界的, 0);卡路里= [200175150450350800150650350300]';conr (I) = diet(:, I)'*calories <= 250* I;结束

检查约束条件晚餐

显示(若干(“晚餐”))
200 *饮食(“麦片”,“晚餐”)+ 175 *饮食(“燕麦片”,“晚餐”)+ 150 *饮食(“酸奶”,“晚餐”)+ 450 *饮食(“花生酱三明治”,“晚餐”)+ 350 *饮食(“披萨”,“晚餐”)+ 800 *饮食(“汉堡包”,“晚餐”)+ 150 *饮食(“沙拉”,“晚餐”)+ 650 *饮食(“牛排”,“晚餐”)+ 350 *饮食(“砂锅”,“晚餐”)+ 300 *饮食(“冰淇淋”,“晚餐”)< = 750

输入参数

全部折叠

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

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

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

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

例子:5

数据类型:

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

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

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

数据类型:字符串|细胞

输出参数

全部折叠

约束,返回为空OptimizationConstraint数组中。使用若干初始化一个创建约束表达式的循环。

例如:

x = optimvar (“x”8);若干= optimconstr (4);k = 1:4若干(k) = 5 * k * (x (2 * k) - x (2 * k - 1)) < = 10 - 2 * k;结束

限制

  • 一个问题中的每个约束表达式必须使用相同的比较。例如,下面的代码会导致一个错误,因为cons1使用< =相比之下,cons2使用> =的比较,cons1cons2是同一个表达式。

    概率= optimproblem;x = optimvar (“x”2,下界的, 0);x(1) + x(2) <= 10;drawtext (x(1) + 4*x(2)) = 0;概率。约束= [cons1; cons2];%这一行将抛出一个错误

    可以通过为约束使用单独的表达式来避免此错误。

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

提示

  • 用向量化表达式创建约束通常比用循环创建约束更有效。看到创造有效的优化问题

  • 您可以使用optimineq而不是optimconstr来创建不等式表达式。类似地,您可以使用optimeq而不是optimconstr来创建相等表达式。

介绍了R2017b