主要内容

OptimConstr.

创建空优化约束阵列

描述

采用OptimConstr.初始化一组约束表达式。

小费

对于完整的工作流程,请参阅基于问题的优化工作流程

例子

约束= OptimConstr(N创造一个N-1-1阵列空优化约束。采用约束初始化创建约束表达式的循环。

例子

约束= OptimConstr(Cstr.创建一系列索引的空优化约束Cstr.,字符向量或串向量的单元阵列。

如果Cstr.是1-by-NCstr., 在哪里NCstr.是元素的数量Cstr., 然后约束也是1-by-NCstr.。否则,约束NCstr.-By-1。

约束= OptimConstr(Cstr.1,N2,......,Cstr.k)要么约束= OptimConstr({Cstr.1,Cstr.2,......,Cstr.k})要么约束= OptimConstr([N1,N2,......,NK]),任何组合Cstr.N参数,创造一个NCstr.1-by-N2-by -...-逐渐NCstr.k阵列空优化约束,在哪里NCstr.是元素的数量Cstr.

例子

全部收缩

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

n = 12;库存= Optimvar('股票',n,1,'类型''整数''indowbound',0);购买= Optimvar('买',n,1,'类型''整数''indowbound',0);卖= Optimvar('卖',n,1,'类型''整数''indowbound',0);initialStock = 100;Stockbalance = OptimConstr(n,1);为了t = 1:n如果t == 1 Enterstock = InitialStock;别的Enterstock =库存(T-1);结尾Stockbalance(t)=库存(t)== enterstock +购买(t) - 卖(t);结尾表演(StockPalance)
(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;

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

tt =那些(n-1,1);d = diag(tt,-1);%换档索引--1Stockbalance2 =股票== D *股票+卖 - 卖;Stockbalance2(1)=库存(1)== InitialStock + Buy(1) - 卖(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

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

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

饭菜= [“早餐”“午餐”“晚餐”];crantr = OptimConstr(餐);食物= [“谷物”“麦片”“酸奶”“花生酱三明治”“比萨”“汉堡包”......“沙拉”“牛扒”“沙锅”“冰淇淋”];饮食= Optimvar('饮食',食物,饭菜,'indowbound',0);卡路里= [200,175,150,450,350,800,150,650,350,300]';为了i = 1:3 contrut(i)=饮食(:,i)'*卡路里<= 250 * i;结尾

检查约束晚餐

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

输入参数

全部收缩

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

  • 的大小class = OptimConstr(n)N-By-1。

  • 的大小class = OptimConstr(N1,N2)N1.-经过-N2.

  • 的大小class = OptimConstr(n1,n2,...,nk)N1.-经过-N2.-By -...-NK.

例子:5.

数据类型:双倍的

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

例子:{'红色','orange','green','blue'}

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

数据类型:细绳|细胞

输出参数

全部收缩

约束,作为空的返回优化混合物大批。采用约束初始化创建约束表达式的循环。

例如:

x = Optimvar('X',8);class = OptimConstr(4);为了k = 1:4约束(k)= 5 * k *(x(2 * k) -  x(2 * k-1))<= 10  -  2 * k;结尾

限制

  • 问题中的每个约束表达式必须使用相同的比较。例如,以下代码会导致错误,因为cons1.用来<=比较,cons2.用来> =比较,和cons1.cons2.处于同样的表达式。

    prob = OptimProblem;x = Optimvar('X'2,'indowbound',0);cons1 = x(1)+ x(2)<= 10;CONS2 = 3 * x(1)+ 4 * x(2)> = 2;prob.constraints = [cons1; cons2];%此行抛出错误

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

    prob.constraints.cons1 = cons1;prob.constraints.cons2 = cons2;

提示

  • 通过矢量化表达式而不是循环创建约束​​通常更有效。看创建有效的优化问题

  • 您可以使用Optimineq.代替OptimConstr.创建不等式表达式。同样,您可以使用Optimeq.代替OptimConstr.创建平等表达。

在R2017B中介绍