主要内容

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);结束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;

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

的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(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

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

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

餐= [“早餐”“午餐”“晚餐”];若干= optimconstr(餐);食物= [“麦片”“燕麦片”“酸奶”“花生酱三明治”“披萨”“汉堡包”...“沙拉”“牛排”“砂锅”“冰激凌”];饮食= optimvar (“饮食”、食品、膳食费、下界的, 0);卡路里= [200175150450350800150650350300]';I = 1:3 constr(I) = diet(:, I)'*calorie <= 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使用> =的比较,cons1而且cons2都在同一个表达里。

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

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

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

提示

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

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

版本历史

介绍了R2017b

Baidu
map