主要内容gydF4y2Ba

intlinproggydF4y2Ba

混合整数线性规划(MILP)gydF4y2Ba

描述gydF4y2Ba

混合整数线性规划求解器。gydF4y2Ba

查找指定的问题的最小值gydF4y2Ba

最小值gydF4y2Ba xgydF4y2Ba fgydF4y2Ba TgydF4y2Ba xgydF4y2Ba 受gydF4y2Ba {gydF4y2Ba xgydF4y2Ba (gydF4y2Ba intcongydF4y2Ba )gydF4y2Ba 都是整数gydF4y2Ba 一个gydF4y2Ba ⋅gydF4y2Ba xgydF4y2Ba ≤gydF4y2Ba bgydF4y2Ba 一个gydF4y2Ba egydF4y2Ba 问gydF4y2Ba ⋅gydF4y2Ba xgydF4y2Ba =gydF4y2Ba bgydF4y2Ba egydF4y2Ba 问gydF4y2Ba lgydF4y2Ba bgydF4y2Ba ≤gydF4y2Ba xgydF4y2Ba ≤gydF4y2Ba ugydF4y2Ba bgydF4y2Ba .gydF4y2Ba

fgydF4y2Ba,gydF4y2BaxgydF4y2Baintcon,gydF4y2BabgydF4y2Ba,gydF4y2Ba说真的gydF4y2Ba,gydF4y2Ba磅gydF4y2Ba,gydF4y2Ba乌兰巴托gydF4y2Ba是向量,并且gydF4y2Ba一个gydF4y2Ba和gydF4y2BaAeqgydF4y2Ba矩阵。gydF4y2Ba

你可以指定gydF4y2BafgydF4y2Baintcon,gydF4y2Ba磅gydF4y2Ba,gydF4y2Ba乌兰巴托gydF4y2Ba向量或数组。看到gydF4y2Ba矩阵的参数gydF4y2Ba.gydF4y2Ba

请注意gydF4y2Ba

intlinproggydF4y2Ba仅适用于基于求解器的方法。有关这两种优化方法的讨论,请参见gydF4y2Ba首先选择基于问题或基于解决方案的方法gydF4y2Ba.gydF4y2Ba

例子gydF4y2Ba

xgydF4y2Ba= intlinprog (gydF4y2BafgydF4y2Ba,gydF4y2BaintcongydF4y2Ba,gydF4y2Ba一个gydF4y2Ba,gydF4y2BabgydF4y2Ba)gydF4y2Ba解决了最小值gydF4y2Baf ' * xgydF4y2Ba这样的组成部分gydF4y2BaxgydF4y2Ba在gydF4y2BaintcongydF4y2Ba都是整数,且gydF4y2BaA*x≤bgydF4y2Ba.gydF4y2Ba

xgydF4y2Ba= intlinprog (gydF4y2BafgydF4y2Ba,gydF4y2BaintcongydF4y2Ba,gydF4y2Ba一个gydF4y2Ba,gydF4y2BabgydF4y2Ba,gydF4y2BaAeqgydF4y2Ba,gydF4y2Ba说真的gydF4y2Ba)gydF4y2Ba在满足等式约束的同时解决了上述问题gydF4y2BaAeq*x = beqgydF4y2Ba.集gydF4y2BaA = []gydF4y2Ba和gydF4y2BaB = []gydF4y2Ba如果不存在不平等。gydF4y2Ba

例子gydF4y2Ba

xgydF4y2Ba= intlinprog (gydF4y2BafgydF4y2Ba,gydF4y2BaintcongydF4y2Ba,gydF4y2Ba一个gydF4y2Ba,gydF4y2BabgydF4y2Ba,gydF4y2BaAeqgydF4y2Ba,gydF4y2Ba说真的gydF4y2Ba,gydF4y2Ba磅gydF4y2Ba,gydF4y2Ba乌兰巴托gydF4y2Ba)gydF4y2Ba定义一组设计变量的下界和上界,gydF4y2BaxgydF4y2Ba,使解总是在值域内gydF4y2BaLb≤x≤ubgydF4y2Ba.集gydF4y2BaAeq = []gydF4y2Ba和gydF4y2BaBeq = []gydF4y2Ba如果等式不存在。gydF4y2Ba

例子gydF4y2Ba

xgydF4y2Ba= intlinprog (gydF4y2BafgydF4y2Ba,gydF4y2BaintcongydF4y2Ba,gydF4y2Ba一个gydF4y2Ba,gydF4y2BabgydF4y2Ba,gydF4y2BaAeqgydF4y2Ba,gydF4y2Ba说真的gydF4y2Ba,gydF4y2Ba磅gydF4y2Ba,gydF4y2Ba乌兰巴托gydF4y2Ba,gydF4y2Bax0gydF4y2Ba)gydF4y2Ba利用初始可行点进行优化gydF4y2Bax0gydF4y2Ba.集gydF4y2BaLb = []gydF4y2Ba和gydF4y2BaUb = []gydF4y2Ba如果不存在边界。gydF4y2Ba

例子gydF4y2Ba

xgydF4y2Ba= intlinprog (gydF4y2BafgydF4y2Ba,gydF4y2BaintcongydF4y2Ba,gydF4y2Ba一个gydF4y2Ba,gydF4y2BabgydF4y2Ba,gydF4y2BaAeqgydF4y2Ba,gydF4y2Ba说真的gydF4y2Ba,gydF4y2Ba磅gydF4y2Ba,gydF4y2Ba乌兰巴托gydF4y2Ba,gydF4y2Bax0gydF4y2Ba,gydF4y2Ba选项gydF4y2Ba)gydF4y2Ba中指定的优化选项的使用最小化gydF4y2Ba选项gydF4y2Ba.使用gydF4y2BaoptimoptionsgydF4y2Ba设置这些选项。集gydF4y2BaX0 = []gydF4y2Ba如果不存在初始点。gydF4y2Ba

例子gydF4y2Ba

xgydF4y2Ba= intlinprog (gydF4y2Ba问题gydF4y2Ba)gydF4y2Ba使用一个gydF4y2Ba问题gydF4y2Ba结构封装所有求解器输入。您可以导入gydF4y2Ba问题gydF4y2Ba结构从MPS文件使用gydF4y2BampsreadgydF4y2Ba.您还可以创建一个gydF4y2Ba问题gydF4y2Ba结构,从gydF4y2BaOptimizationProblemgydF4y2Ba对象,使用gydF4y2Baprob2structgydF4y2Ba.gydF4y2Ba

例子gydF4y2Ba

[gydF4y2BaxgydF4y2Ba,gydF4y2BafvalgydF4y2Ba,gydF4y2BaexitflaggydF4y2Ba,gydF4y2Ba输出gydF4y2Ba= intlinprog(gydF4y2Ba___gydF4y2Ba)gydF4y2Ba,对于上面描述的任何输入参数,返回gydF4y2BaFval = f'*xgydF4y2Ba,一个值gydF4y2BaexitflaggydF4y2Ba描述退出条件,以及结构gydF4y2Ba输出gydF4y2Ba包含关于优化过程的信息。gydF4y2Ba

例子gydF4y2Ba

全部折叠gydF4y2Ba

解决问题gydF4y2Ba

最小值gydF4y2Ba xgydF4y2Ba 8gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba +gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba 年代gydF4y2Ba ugydF4y2Ba bgydF4y2Ba jgydF4y2Ba egydF4y2Ba cgydF4y2Ba tgydF4y2Ba tgydF4y2Ba ogydF4y2Ba {gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba 我gydF4y2Ba 年代gydF4y2Ba 一个gydF4y2Ba ngydF4y2Ba 我gydF4y2Ba ngydF4y2Ba tgydF4y2Ba egydF4y2Ba ggydF4y2Ba egydF4y2Ba rgydF4y2Ba xgydF4y2Ba 1gydF4y2Ba +gydF4y2Ba 2gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba ≥gydF4y2Ba -gydF4y2Ba 1gydF4y2Ba 4gydF4y2Ba -gydF4y2Ba 4gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba -gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba ≤gydF4y2Ba -gydF4y2Ba 3.gydF4y2Ba 3.gydF4y2Ba 2gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba +gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba ≤gydF4y2Ba 2gydF4y2Ba 0gydF4y2Ba .gydF4y2Ba

写出目标函数向量和整数变量向量。gydF4y2Ba

F = [8;1];Intcon = 2;gydF4y2Ba

把所有不等式转化成这个形式gydF4y2BaA*x <= bgydF4y2Ba用"大于"不等式乘以gydF4y2Ba1gydF4y2Ba.gydF4y2Ba

A = [-1,-2;4、1;2、1];B = [14;-33;20];gydF4y2Ba

调用gydF4y2BaintlinproggydF4y2Ba.gydF4y2Ba

x = intlinprog(f,intcon,A,b)gydF4y2Ba
LP:最优目标值为59.000000。找到最优解。Intlinprog停止在根节点,因为目标值在最佳值的间隙公差范围内,选项。AbsoluteGapTolerance = 0。intcon变量是公差范围内的整数,选项。IntegerTolerance = 1e-05。gydF4y2Ba
x =gydF4y2Ba2×1gydF4y2Ba6.5000 - 7.0000gydF4y2Ba

解决问题gydF4y2Ba

最小值gydF4y2Ba xgydF4y2Ba (gydF4y2Ba -gydF4y2Ba 3.gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba -gydF4y2Ba 2gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba -gydF4y2Ba xgydF4y2Ba 3.gydF4y2Ba )gydF4y2Ba 年代gydF4y2Ba ugydF4y2Ba bgydF4y2Ba jgydF4y2Ba egydF4y2Ba cgydF4y2Ba tgydF4y2Ba tgydF4y2Ba ogydF4y2Ba {gydF4y2Ba xgydF4y2Ba 3.gydF4y2Ba bgydF4y2Ba 我gydF4y2Ba ngydF4y2Ba 一个gydF4y2Ba rgydF4y2Ba ygydF4y2Ba xgydF4y2Ba 1gydF4y2Ba ,gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba ≥gydF4y2Ba 0gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba +gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba +gydF4y2Ba xgydF4y2Ba 3.gydF4y2Ba ≤gydF4y2Ba 7gydF4y2Ba 4gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba +gydF4y2Ba 2gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba +gydF4y2Ba xgydF4y2Ba 3.gydF4y2Ba =gydF4y2Ba 1gydF4y2Ba 2gydF4y2Ba .gydF4y2Ba

写出目标函数向量和整数变量向量。gydF4y2Ba

F = [-3;-2;-1];Intcon = 3;gydF4y2Ba

写出线性不等式约束。gydF4y2Ba

A = [1,1,1];B = 7;gydF4y2Ba

写出线性等式约束。gydF4y2Ba

Aeq = [4,2,1];Beq = 12;gydF4y2Ba

编写绑定的约束。gydF4y2Ba

Lb = 0 (3,1);ub = [Inf;Inf;1];gydF4y2Ba%强制x(3)为二进制gydF4y2Ba

调用gydF4y2BaintlinproggydF4y2Ba.gydF4y2Ba

x = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)gydF4y2Ba
LP:最佳目标值为-12.000000。找到最优解。Intlinprog停止在根节点,因为目标值在最佳值的间隙公差范围内,选项。AbsoluteGapTolerance = 0。intcon变量是公差范围内的整数,选项。IntegerTolerance = 1e-05。gydF4y2Ba
x =gydF4y2Ba3×1gydF4y2Ba0 5.5000 1.0000gydF4y2Ba

比较有初始可行点和无初始可行点时求解整数规划问题的步数。这个问题有8个变量,4个线性等式约束,并且所有变量都被限制为正。gydF4y2Ba

定义线性相等约束矩阵和向量。gydF4y2Ba

Aeq = [22 13 26 33 21 3 14 26 39 39 16 22 28 26 30 23 24 18 14 29 27 30 38 26 26 41 26 28 36 18 38 16 26];Beq = [7872 10466 11322 12058];gydF4y2Ba

设置限制所有变量为非负的下界。gydF4y2Ba

N = 8;lb = 0 (N,1);gydF4y2Ba

指定所有变量都是整数值。gydF4y2Ba

intcon = 1:N;gydF4y2Ba

设定目标函数向量gydF4y2BafgydF4y2Ba.gydF4y2Ba

F = [2 10 13 17 7 5 7 3];gydF4y2Ba

在不使用初始点的情况下解决问题,并检查显示以查看分支和绑定节点的数量。gydF4y2Ba

[x1,fval1,exitflag1,output1] = intlinprog(f,intcon,[],[],Aeq,beq,lb);gydF4y2Ba
LP:最优目标值为1554.047531。切割生成:应用8强CG切割。下界为1591.000000。分支和绑定:节点总数int整数相对探索时间(s)解fval gap (%) 10000 0.92 0 - - 14739 1.27 1 2.154000e+03 2.593968e+01 18258 1.59 2 1.854000e+03 1.180593e+01 18673 1.62 2 1.854000e+03 1.563342e+00 18829 1.64 2 1.854000e+03 0.000000e+00找到最优解。Intlinprog停止是因为目标值在一个间隙公差的最优值,选项。AbsoluteGapTolerance = 0。intcon变量是公差范围内的整数,选项。IntegerTolerance = 1e-05。gydF4y2Ba

为了便于比较,用初始可行点求解。gydF4y2Ba

X0 = [8 62 23 103 53 84 46 34];(x2, fval2 exitflag2 output2] = intlinprog (f intcon [] [], Aeq,说真的,磅,[],x0);gydF4y2Ba
LP:最优目标值为1554.047531。切割生成:应用8强CG切割。下界为1591.000000。相对差距为59.20%。分支和绑定:节点总数int整数相对探索时间(s)解fval gap (%) 3627 0.45 2 2.154000e+03 2.593968e+01 5844 0.64 3 1.854000e+03 1.180593e+01 6204 0.68 3 1.854000e+03 1.455526e+00 6400 0.69 3 1.854000e+03 0.000000e+00找到最优解。Intlinprog停止是因为目标值在一个间隙公差的最优值,选项。AbsoluteGapTolerance = 0。intcon变量是公差范围内的整数,选项。IntegerTolerance = 1e-05。gydF4y2Ba
  • 如果没有初始点,gydF4y2BaintlinproggydF4y2Ba走了大约3万步。gydF4y2Ba

  • 用一个初始点,gydF4y2BaintlinproggydF4y2Ba走了大约5000步。gydF4y2Ba

给出一个起始点并不总是有帮助。对于这个问题,给出初始点可以节省时间和计算步骤。然而,对于某些问题,给出一个初始点可能会导致gydF4y2BaintlinproggydF4y2Ba采取更多的步骤。gydF4y2Ba

解决问题gydF4y2Ba

最小值gydF4y2Ba xgydF4y2Ba (gydF4y2Ba -gydF4y2Ba 3.gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba -gydF4y2Ba 2gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba -gydF4y2Ba xgydF4y2Ba 3.gydF4y2Ba )gydF4y2Ba 年代gydF4y2Ba ugydF4y2Ba bgydF4y2Ba jgydF4y2Ba egydF4y2Ba cgydF4y2Ba tgydF4y2Ba tgydF4y2Ba ogydF4y2Ba {gydF4y2Ba xgydF4y2Ba 3.gydF4y2Ba bgydF4y2Ba 我gydF4y2Ba ngydF4y2Ba 一个gydF4y2Ba rgydF4y2Ba ygydF4y2Ba xgydF4y2Ba 1gydF4y2Ba ,gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba ≥gydF4y2Ba 0gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba +gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba +gydF4y2Ba xgydF4y2Ba 3.gydF4y2Ba ≤gydF4y2Ba 7gydF4y2Ba 4gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba +gydF4y2Ba 2gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba +gydF4y2Ba xgydF4y2Ba 3.gydF4y2Ba =gydF4y2Ba 1gydF4y2Ba 2gydF4y2Ba

不显示迭代显示。gydF4y2Ba

指定求解器输入。gydF4y2Ba

F = [-3;-2;-1];Intcon = 3;A = [1,1,1];B = 7;Aeq = [4,2,1];Beq = 12;Lb = 0 (3,1);ub = [Inf;Inf;1];gydF4y2Ba%强制x(3)是二进制的gydF4y2BaX0 = [];gydF4y2Ba

指定不显示。gydF4y2Ba

选项= optimoptions(gydF4y2Ba“intlinprog”gydF4y2Ba,gydF4y2Ba“显示”gydF4y2Ba,gydF4y2Ba“关闭”gydF4y2Ba);gydF4y2Ba

运行求解器。gydF4y2Ba

x = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub,x0,options)gydF4y2Ba
x =gydF4y2Ba3×1gydF4y2Ba0 5.5000 1.0000gydF4y2Ba

此示例演示如何使用基于问题的方法设置问题,然后使用基于求解器的方法解决问题。问题是gydF4y2Ba

最小值gydF4y2Ba xgydF4y2Ba (gydF4y2Ba -gydF4y2Ba 3.gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba -gydF4y2Ba 2gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba -gydF4y2Ba xgydF4y2Ba 3.gydF4y2Ba )gydF4y2Ba 年代gydF4y2Ba ugydF4y2Ba bgydF4y2Ba jgydF4y2Ba egydF4y2Ba cgydF4y2Ba tgydF4y2Ba tgydF4y2Ba ogydF4y2Ba {gydF4y2Ba xgydF4y2Ba 3.gydF4y2Ba bgydF4y2Ba 我gydF4y2Ba ngydF4y2Ba 一个gydF4y2Ba rgydF4y2Ba ygydF4y2Ba xgydF4y2Ba 1gydF4y2Ba ,gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba ≥gydF4y2Ba 0gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba +gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba +gydF4y2Ba xgydF4y2Ba 3.gydF4y2Ba ≤gydF4y2Ba 7gydF4y2Ba 4gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba +gydF4y2Ba 2gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba +gydF4y2Ba xgydF4y2Ba 3.gydF4y2Ba =gydF4y2Ba 1gydF4y2Ba 2gydF4y2Ba

创建一个gydF4y2BaOptimizationProblemgydF4y2Ba对象命名gydF4y2Ba概率gydF4y2Ba来表示这个问题。若要指定二进制变量,请创建一个整数类型的优化变量,下界为0,上界为1。gydF4y2Ba

X = optimvar(gydF4y2Ba“x”gydF4y2Ba2,gydF4y2Ba下界的gydF4y2Ba, 0);Xb = optimvar(gydF4y2Ba“xb”gydF4y2Ba,gydF4y2Ba下界的gydF4y2Ba0,gydF4y2Ba“UpperBound”gydF4y2Ba, 1gydF4y2Ba“类型”gydF4y2Ba,gydF4y2Ba“整数”gydF4y2Ba);问题=优化问题(gydF4y2Ba“目标”gydF4y2Ba3 * x (1) 2 * (2) xb);con1 = sum(x) + xb <= 7;con2 = 4*x(1) + 2*x(2) + xb == 12;prob.Constraints。con1 = con1;prob.Constraints。con2 = con2;gydF4y2Ba

将问题对象转换为问题结构。gydF4y2Ba

Problem = prob2struct(probb);gydF4y2Ba

解决产生的问题结构。gydF4y2Ba

[sol,fval,exitflag,output] = intlinprog(problem)gydF4y2Ba
LP:最佳目标值为-12.000000。找到最优解。Intlinprog停止在根节点,因为目标值在最佳值的间隙公差范围内,选项。AbsoluteGapTolerance = 0。intcon变量是公差范围内的整数,选项。IntegerTolerance = 1e-05。gydF4y2Ba
索尔=gydF4y2Ba3×1gydF4y2Ba0 5.5000 1.0000gydF4y2Ba
Fval = -12gydF4y2Ba
Exitflag = 1gydF4y2Ba
输出=gydF4y2Ba带字段的结构:gydF4y2Barelativegap: 0 absolutegap: 0 numfeaspoints: 1 numnodes: 0 constrviolation: 0 message: '找到最佳解决方案....'gydF4y2Ba

这两个gydF4y2Ba索尔(1)gydF4y2Ba和gydF4y2Ba索尔(3)gydF4y2Babinary-valued。哪个值对应于二进制优化变量gydF4y2BaxbgydF4y2Ba?gydF4y2Ba

概率。变量gydF4y2Ba
ans =gydF4y2Ba带字段的结构:gydF4y2BaX: [2x1 optimt .problemdef.]OptimizationVariable] xb: [1x1 optimize .problemdef.OptimizationVariable]gydF4y2Ba

的变量gydF4y2BaxbgydF4y2Ba最后出现在gydF4y2Ba变量gydF4y2Ba显示,所以gydF4y2BaxbgydF4y2Ba对应于gydF4y2BaSol (3) = 1gydF4y2Ba.看到gydF4y2Ba算法gydF4y2Ba.gydF4y2Ba

调用gydF4y2BaintlinproggydF4y2Ba有更多的输出,以查看解决方案的细节和过程。gydF4y2Ba

目标是解决问题gydF4y2Ba

最小值gydF4y2Ba xgydF4y2Ba (gydF4y2Ba -gydF4y2Ba 3.gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba -gydF4y2Ba 2gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba -gydF4y2Ba xgydF4y2Ba 3.gydF4y2Ba )gydF4y2Ba 年代gydF4y2Ba ugydF4y2Ba bgydF4y2Ba jgydF4y2Ba egydF4y2Ba cgydF4y2Ba tgydF4y2Ba tgydF4y2Ba ogydF4y2Ba {gydF4y2Ba xgydF4y2Ba 3.gydF4y2Ba bgydF4y2Ba 我gydF4y2Ba ngydF4y2Ba 一个gydF4y2Ba rgydF4y2Ba ygydF4y2Ba xgydF4y2Ba 1gydF4y2Ba ,gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba ≥gydF4y2Ba 0gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba +gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba +gydF4y2Ba xgydF4y2Ba 3.gydF4y2Ba ≤gydF4y2Ba 7gydF4y2Ba 4gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba +gydF4y2Ba 2gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba +gydF4y2Ba xgydF4y2Ba 3.gydF4y2Ba =gydF4y2Ba 1gydF4y2Ba 2gydF4y2Ba .gydF4y2Ba

指定求解器输入。gydF4y2Ba

F = [-3;-2;-1];Intcon = 3;A = [1,1,1];B = 7;Aeq = [4,2,1];Beq = 12;Lb = 0 (3,1);ub = [Inf;Inf;1];gydF4y2Ba%强制x(3)是二进制的gydF4y2Ba

调用gydF4y2BaintlinproggydF4y2Ba所有输出。gydF4y2Ba

[x,fval,exitflag,output] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)gydF4y2Ba
LP:最佳目标值为-12.000000。找到最优解。Intlinprog停止在根节点,因为目标值在最佳值的间隙公差范围内,选项。AbsoluteGapTolerance = 0。intcon变量是公差范围内的整数,选项。IntegerTolerance = 1e-05。gydF4y2Ba
x =gydF4y2Ba3×1gydF4y2Ba0 5.5000 1.0000gydF4y2Ba
Fval = -12gydF4y2Ba
Exitflag = 1gydF4y2Ba
输出=gydF4y2Ba带字段的结构:gydF4y2Barelativegap: 0 absolutegap: 0 numfeaspoints: 1 numnodes: 0 constrviolation: 0 message: '找到最佳解决方案....'gydF4y2Ba

输出结构显示gydF4y2BanumnodesgydF4y2Ba是gydF4y2Ba0gydF4y2Ba.这意味着gydF4y2BaintlinproggydF4y2Ba在分支之前解决了问题。这表明结果是可靠的。此外,gydF4y2BaabsolutegapgydF4y2Ba和gydF4y2BarelativegapgydF4y2Ba字段是gydF4y2Ba0gydF4y2Ba.这是另一个表明结果是可靠的。gydF4y2Ba

输入参数gydF4y2Ba

全部折叠gydF4y2Ba

系数向量,指定为实向量或实数组。系数向量表示目标函数gydF4y2Baf ' * xgydF4y2Ba.这个符号假设gydF4y2BafgydF4y2Ba是列向量,但可以自由使用行向量或数组。在内部,gydF4y2BalinproggydF4y2Ba转换gydF4y2BafgydF4y2Ba对列向量gydF4y2Baf (:)gydF4y2Ba.gydF4y2Ba

如果你指定gydF4y2BaF = []gydF4y2Ba,gydF4y2BaintlinproggydF4y2Ba试图找到一个可行点,而不是试图最小化目标函数。gydF4y2Ba

例子:gydF4y2BaF = [4;2;-1.7];gydF4y2Ba

数据类型:gydF4y2Ba双gydF4y2Ba

整数约束的向量,指定为正整数的向量。中的值gydF4y2BaintcongydF4y2Ba指出决策变量的组成部分gydF4y2BaxgydF4y2Ba它们都是整数值。gydF4y2BaintcongydF4y2Ba值为gydF4y2Ba1gydF4y2Ba通过gydF4y2Ba元素个数(f)gydF4y2Ba.gydF4y2Ba

intcongydF4y2Ba也可以是数组。在内部,gydF4y2BaintlinproggydF4y2Ba转换数组gydF4y2BaintcongydF4y2Ba对向量gydF4y2Baintcon (:)gydF4y2Ba.gydF4y2Ba

例子:gydF4y2BaIntcon = [1,2,7]gydF4y2Ba意味着gydF4y2Bax (1)gydF4y2Ba,gydF4y2Bax (2)gydF4y2Ba,gydF4y2Bax (7)gydF4y2Ba只取整数值。gydF4y2Ba

数据类型:gydF4y2Ba双gydF4y2Ba

线性不等式约束,指定为实矩阵。gydF4y2Ba一个gydF4y2Ba是一个gydF4y2Ba米gydF4y2Ba——- - - - - -gydF4y2BaNgydF4y2Ba矩阵,gydF4y2Ba米gydF4y2Ba不等式的数量,和gydF4y2BaNgydF4y2Ba变量的数量(长度gydF4y2BafgydF4y2Ba).对于大问题,可以通过gydF4y2Ba一个gydF4y2Ba作为一个稀疏矩阵。gydF4y2Ba

一个gydF4y2Ba编码gydF4y2Ba米gydF4y2Ba线性不等式gydF4y2Ba

A*x <= bgydF4y2Ba,gydF4y2Ba

在哪里gydF4y2BaxgydF4y2Ba列向量是gydF4y2BaNgydF4y2Ba变量gydF4y2Bax (:)gydF4y2Ba,gydF4y2BabgydF4y2Ba列向量是gydF4y2Ba米gydF4y2Ba元素。gydF4y2Ba

例如,考虑以下不等式:gydF4y2Ba

xgydF4y2Ba1gydF4y2Ba+ 2gydF4y2BaxgydF4y2Ba2gydF4y2Ba≤10gydF4y2Ba
3.gydF4y2BaxgydF4y2Ba1gydF4y2Ba+ 4gydF4y2BaxgydF4y2Ba2gydF4y2Ba≤20gydF4y2Ba
5gydF4y2BaxgydF4y2Ba1gydF4y2Ba+ 6gydF4y2BaxgydF4y2Ba2gydF4y2Ba≤30。gydF4y2Ba

通过输入以下约束来指定不等式。gydF4y2Ba

A = [1,2;3,4;5,6];B = [10;20;30];gydF4y2Ba

例子:gydF4y2Ba要指定x分量之和小于等于1,取gydF4y2BaA = ones(1,N)gydF4y2Ba和gydF4y2BaB = 1gydF4y2Ba.gydF4y2Ba

数据类型:gydF4y2Ba双gydF4y2Ba

线性不等式约束,指定为实向量。gydF4y2BabgydF4y2Ba是一个gydF4y2Ba米gydF4y2Ba元素的相关向量gydF4y2Ba一个gydF4y2Ba矩阵。如果你通过了gydF4y2BabgydF4y2Ba作为行向量,解算器内部转换gydF4y2BabgydF4y2Ba对列向量gydF4y2Bab (:)gydF4y2Ba.对于大问题,可以通过gydF4y2BabgydF4y2Ba作为一个稀疏向量。gydF4y2Ba

bgydF4y2Ba编码gydF4y2Ba米gydF4y2Ba线性不等式gydF4y2Ba

A*x <= bgydF4y2Ba,gydF4y2Ba

在哪里gydF4y2BaxgydF4y2Ba列向量是gydF4y2BaNgydF4y2Ba变量gydF4y2Bax (:)gydF4y2Ba,gydF4y2Ba一个gydF4y2Ba矩阵的大小gydF4y2Ba米gydF4y2Ba——- - - - - -gydF4y2BaNgydF4y2Ba.gydF4y2Ba

例如,考虑以下不等式:gydF4y2Ba

xgydF4y2Ba1gydF4y2Ba+ 2gydF4y2BaxgydF4y2Ba2gydF4y2Ba≤10gydF4y2Ba
3.gydF4y2BaxgydF4y2Ba1gydF4y2Ba+ 4gydF4y2BaxgydF4y2Ba2gydF4y2Ba≤20gydF4y2Ba
5gydF4y2BaxgydF4y2Ba1gydF4y2Ba+ 6gydF4y2BaxgydF4y2Ba2gydF4y2Ba≤30。gydF4y2Ba

通过输入以下约束来指定不等式。gydF4y2Ba

A = [1,2;3,4;5,6];B = [10;20;30];gydF4y2Ba

例子:gydF4y2Ba要指定x分量的和为1或更小,请使用gydF4y2BaA = ones(1,N)gydF4y2Ba和gydF4y2BaB = 1gydF4y2Ba.gydF4y2Ba

数据类型:gydF4y2Ba双gydF4y2Ba

线性等式约束,指定为实矩阵。gydF4y2BaAeqgydF4y2Ba是一个gydF4y2Ba我gydF4y2Ba——- - - - - -gydF4y2BaNgydF4y2Ba矩阵,gydF4y2Ba我gydF4y2Ba等式的个数,和gydF4y2BaNgydF4y2Ba变量的数量(长度gydF4y2BafgydF4y2Ba).对于大问题,可以通过gydF4y2BaAeqgydF4y2Ba作为一个稀疏矩阵。gydF4y2Ba

AeqgydF4y2Ba编码gydF4y2Ba我gydF4y2Ba线性等式gydF4y2Ba

Aeq*x = beqgydF4y2Ba,gydF4y2Ba

在哪里gydF4y2BaxgydF4y2Ba列向量是gydF4y2BaNgydF4y2Ba变量gydF4y2Bax (:)gydF4y2Ba,gydF4y2Ba说真的gydF4y2Ba列向量是gydF4y2Ba我gydF4y2Ba元素。gydF4y2Ba

例如,考虑以下等式:gydF4y2Ba

xgydF4y2Ba1gydF4y2Ba+ 2gydF4y2BaxgydF4y2Ba2gydF4y2Ba+ 3gydF4y2BaxgydF4y2Ba3.gydF4y2Ba= 10gydF4y2Ba
2gydF4y2BaxgydF4y2Ba1gydF4y2Ba+ 4gydF4y2BaxgydF4y2Ba2gydF4y2Ba+gydF4y2BaxgydF4y2Ba3.gydF4y2Ba= 20。gydF4y2Ba

通过输入以下约束来指定等式。gydF4y2Ba

Aeq = [1,2,3;2,4,1];Beq = [10;20];gydF4y2Ba

例子:gydF4y2Ba要指定x分量的和为1,取gydF4y2BaAeq = ones(1,N)gydF4y2Ba和gydF4y2BaBeq = 1gydF4y2Ba.gydF4y2Ba

数据类型:gydF4y2Ba双gydF4y2Ba

线性等式约束,指定为实向量。gydF4y2Ba说真的gydF4y2Ba是一个gydF4y2Ba我gydF4y2Ba元素的相关向量gydF4y2BaAeqgydF4y2Ba矩阵。如果你通过了gydF4y2Ba说真的gydF4y2Ba作为行向量,解算器内部转换gydF4y2Ba说真的gydF4y2Ba对列向量gydF4y2Ba说真的(:)gydF4y2Ba.对于大问题,可以通过gydF4y2Ba说真的gydF4y2Ba作为一个稀疏向量。gydF4y2Ba

说真的gydF4y2Ba编码gydF4y2Ba我gydF4y2Ba线性等式gydF4y2Ba

Aeq*x = beqgydF4y2Ba,gydF4y2Ba

在哪里gydF4y2BaxgydF4y2Ba列向量是gydF4y2BaNgydF4y2Ba变量gydF4y2Bax (:)gydF4y2Ba,gydF4y2BaAeqgydF4y2Ba矩阵的大小gydF4y2Ba我gydF4y2Ba——- - - - - -gydF4y2BaNgydF4y2Ba.gydF4y2Ba

例如,考虑以下等式:gydF4y2Ba

xgydF4y2Ba1gydF4y2Ba+ 2gydF4y2BaxgydF4y2Ba2gydF4y2Ba+ 3gydF4y2BaxgydF4y2Ba3.gydF4y2Ba= 10gydF4y2Ba
2gydF4y2BaxgydF4y2Ba1gydF4y2Ba+ 4gydF4y2BaxgydF4y2Ba2gydF4y2Ba+gydF4y2BaxgydF4y2Ba3.gydF4y2Ba= 20。gydF4y2Ba

通过输入以下约束来指定等式。gydF4y2Ba

Aeq = [1,2,3;2,4,1];Beq = [10;20];gydF4y2Ba

例子:gydF4y2Ba要指定x分量的和为1,使用gydF4y2BaAeq = ones(1,N)gydF4y2Ba和gydF4y2BaBeq = 1gydF4y2Ba.gydF4y2Ba

数据类型:gydF4y2Ba双gydF4y2Ba

下界,指定为vector或double数组。gydF4y2Ba磅gydF4y2Ba中以元素方式表示下界gydF4y2Ba磅gydF4y2Ba≤gydF4y2BaxgydF4y2Ba≤gydF4y2Ba乌兰巴托gydF4y2Ba.gydF4y2Ba

在内部,gydF4y2BaintlinproggydF4y2Ba转换数组gydF4y2Ba磅gydF4y2Ba对向量gydF4y2Ba磅(:)gydF4y2Ba.gydF4y2Ba

例子:gydF4y2Balb = [0;-Inf;4]gydF4y2Ba意味着gydF4y2BaX(1)≥0gydF4y2Ba,gydF4y2BaX(3)≥4gydF4y2Ba.gydF4y2Ba

数据类型:gydF4y2Ba双gydF4y2Ba

上界,指定为vector或double类型数组。gydF4y2Ba乌兰巴托gydF4y2Ba中以元素方式表示上界gydF4y2Ba磅gydF4y2Ba≤gydF4y2BaxgydF4y2Ba≤gydF4y2Ba乌兰巴托gydF4y2Ba.gydF4y2Ba

在内部,gydF4y2BaintlinproggydF4y2Ba转换数组gydF4y2Ba乌兰巴托gydF4y2Ba对向量gydF4y2Ba乌兰巴托(:)gydF4y2Ba.gydF4y2Ba

例子:gydF4y2Baub = [Inf;4;10]gydF4y2Ba意味着gydF4y2BaX(2)≤4gydF4y2Ba,gydF4y2BaX(3)≤10gydF4y2Ba.gydF4y2Ba

数据类型:gydF4y2Ba双gydF4y2Ba

初始点,指定为实数组。元素的数量gydF4y2Bax0gydF4y2Ba等于元素的个数吗gydF4y2BafgydF4y2Ba,当gydF4y2BafgydF4y2Ba的存在。否则,该数与的列数相同gydF4y2Ba一个gydF4y2Ba或gydF4y2BaAeqgydF4y2Ba.在内部,求解器转换数组gydF4y2Bax0gydF4y2Ba变成一个向量gydF4y2Bax0 (:)gydF4y2Ba.gydF4y2Ba

提供gydF4y2Bax0gydF4y2Ba可以改变时间的长短吗gydF4y2BaintlinproggydF4y2Ba收敛。很难预测是如何发生的gydF4y2Bax0gydF4y2Ba影响求解器。关于适当使用的建议gydF4y2Ba启发式gydF4y2Ba与gydF4y2Bax0gydF4y2Ba,请参阅gydF4y2Ba提示gydF4y2Ba.gydF4y2Ba

x0gydF4y2Ba必须对所有约束条件都是可行的。如果gydF4y2Bax0gydF4y2Ba不可行的,解算错误。如果你没有一个可行的gydF4y2Bax0gydF4y2Ba,设置gydF4y2BaX0 = []gydF4y2Ba.gydF4y2Ba

例子:gydF4y2BaX0 = 100*兰特(尺寸(f))gydF4y2Ba

数据类型:gydF4y2Ba双gydF4y2Ba

选项gydF4y2BaintlinproggydF4y2Ba,指定为的输出gydF4y2BaoptimoptionsgydF4y2Ba.gydF4y2Ba

中缺少一些选项gydF4y2BaoptimoptionsgydF4y2Ba显示。这些选项在下表中以斜体字显示。详细信息请参见gydF4y2Ba视图优化选项gydF4y2Ba.gydF4y2Ba

选项gydF4y2Ba 描述gydF4y2Ba 默认的gydF4y2Ba
AbsoluteGapTolerancegydF4y2Ba

负的真实。gydF4y2BaintlinproggydF4y2Ba如果内部计算的上部(gydF4y2BaUgydF4y2Ba)及较低(gydF4y2BalgydF4y2Ba)目标函数上的边界小于或等于gydF4y2BaAbsoluteGapTolerancegydF4y2Ba:gydF4y2Ba

U - L <= AbsoluteGapTolerancegydF4y2Ba.gydF4y2Ba

0gydF4y2Ba
BranchRulegydF4y2Ba

选择分支组件的规则:gydF4y2Ba

  • “maxpscost”gydF4y2Ba-伪成本最大的分数部分。看到gydF4y2Ba分支与边界gydF4y2Ba.gydF4y2Ba

  • “strongpscost”gydF4y2Ba-具有最大假成本和更准确的估计假成本的分数部分gydF4y2Ba“maxpscost”gydF4y2Ba.看到gydF4y2Ba分支与边界gydF4y2Ba.gydF4y2Ba

  • “可靠性”gydF4y2Ba-具有最大伪成本的分数部分,甚至比中更准确地估计伪成本gydF4y2Ba“strongpscost”gydF4y2Ba.看到gydF4y2Ba分支与边界gydF4y2Ba.gydF4y2Ba

  • “mostfractional”gydF4y2Ba—小数部分最接近的分量gydF4y2Ba1/2gydF4y2Ba.gydF4y2Ba

  • “maxfun”gydF4y2Ba-目标向量绝对值中对应分量最大的分数分量gydF4y2BafgydF4y2Ba.gydF4y2Ba

“可靠性”gydF4y2Ba
ConstraintTolerancegydF4y2Ba 真正的从gydF4y2Ba1 e-9gydF4y2Ba通过gydF4y2Ba1 e - 3gydF4y2Ba这是线性约束所能具有且仍被认为满足的最大差异。gydF4y2BaConstraintTolerancegydF4y2Ba不是停止标准。gydF4y2Ba 1的军医gydF4y2Ba
CutGenerationgydF4y2Ba

切割产生的水平(见gydF4y2Ba减少代gydF4y2Ba):gydF4y2Ba

  • “没有”gydF4y2Ba-不削减。使gydF4y2BaCutMaxIterationsgydF4y2Ba无关紧要的。gydF4y2Ba

  • “基本”gydF4y2Ba-正常切割生成。gydF4y2Ba

  • “中间”gydF4y2Ba-使用更多切割类型。gydF4y2Ba

  • “高级”gydF4y2Ba-使用大多数切割类型。gydF4y2Ba

“基本”gydF4y2Ba
CutMaxIterationsgydF4y2Ba 在进入分支定界阶段之前通过所有切割生成方法的次数,从gydF4y2Ba1gydF4y2Ba通过gydF4y2Ba50gydF4y2Ba.禁用切割生成通过设置gydF4y2BaCutGenerationgydF4y2Ba选项gydF4y2Ba“没有”gydF4y2Ba.gydF4y2Ba 10gydF4y2Ba
显示gydF4y2Ba

显示水平(见gydF4y2Ba迭代显示gydF4y2Ba):gydF4y2Ba

  • “关闭”gydF4y2Ba或gydF4y2Ba“没有”gydF4y2Ba-无迭代显示gydF4y2Ba

  • “最后一次”gydF4y2Ba—只显示最终值gydF4y2Ba

  • “通路”gydF4y2Ba-显示迭代显示gydF4y2Ba

“通路”gydF4y2Ba
启发式gydF4y2Ba

搜索可行点的算法(见gydF4y2Ba寻找可行解的启发式方法gydF4y2Ba):gydF4y2Ba

  • “基本”gydF4y2Ba

  • “中间”gydF4y2Ba

  • “高级”gydF4y2Ba

  • “rss”gydF4y2Ba

  • “rin”gydF4y2Ba

  • “圆”gydF4y2Ba

  • “潜水”gydF4y2Ba

  • “rss-diving”gydF4y2Ba

  • “rins-diving”gydF4y2Ba

  • “round-diving”gydF4y2Ba

  • “没有”gydF4y2Ba

“基本”gydF4y2Ba
HeuristicsMaxNodesgydF4y2Ba 严格的正整数,限制了节点的数量gydF4y2BaintlinproggydF4y2Ba可以在其分支定界中探索可行点的搜索。只适用于gydF4y2Ba“rss”gydF4y2Ba和gydF4y2Ba“rin”gydF4y2Ba.看到gydF4y2Ba寻找可行解的启发式方法gydF4y2Ba.gydF4y2Ba 50gydF4y2Ba
IntegerPreprocessgydF4y2Ba

整数预处理的类型(参见gydF4y2Ba混合整数程序预处理gydF4y2Ba):gydF4y2Ba

  • “没有”gydF4y2Ba-使用很少的整数预处理步骤。gydF4y2Ba

  • “基本”gydF4y2Ba—使用适度的整数预处理步骤。gydF4y2Ba

  • “高级”gydF4y2Ba—使用所有可用的整数预处理步骤。gydF4y2Ba

“基本”gydF4y2Ba
IntegerTolerancegydF4y2Ba 真正的从gydF4y2Ba1 e-6gydF4y2Ba通过gydF4y2Ba1 e - 3gydF4y2Ba,其中与整数的最大偏差表示解的一个分量gydF4y2BaxgydF4y2Ba可以被认为是一个整数。gydF4y2BaIntegerTolerancegydF4y2Ba不是停止标准。gydF4y2Ba 1 e-5gydF4y2Ba
LPMaxIterationsgydF4y2Ba 严格的正整数,分支定界过程中每个节点的最大单纯形迭代次数。gydF4y2Ba

max(3e4, 10*(numberofe+ numberofin+ numberOfVariables))gydF4y2Ba

在这个表达式中,gydF4y2BanumberOfEqualitiesgydF4y2Ba的行数gydF4y2BaAeqgydF4y2Ba,gydF4y2BanumberOfInequalitiesgydF4y2Ba的行数gydF4y2Ba一个gydF4y2Ba,gydF4y2BanumberOfVariablesgydF4y2Ba的元素个数gydF4y2BafgydF4y2Ba.gydF4y2Ba

LPOptimalityTolerancegydF4y2Ba 非负实,其中降低成本必须超过gydF4y2BaLPOptimalityTolerancegydF4y2Ba将一个变量带入基中。gydF4y2Ba 1 e -gydF4y2Ba
LPPreprocessgydF4y2Ba

松弛线性规划的解的预处理类型(见gydF4y2Ba线性规划预处理gydF4y2Ba):gydF4y2Ba

  • “没有”gydF4y2Ba—不进行预处理。gydF4y2Ba

  • “基本”gydF4y2Ba—使用预处理。gydF4y2Ba

“基本”gydF4y2Ba
MaxNodesgydF4y2Ba 严格的正整数,这是最大的节点数gydF4y2BaintlinproggydF4y2Ba在其分支与绑定过程中进行探索。gydF4y2Ba 1 e7gydF4y2Ba
MaxFeasiblePointsgydF4y2Ba 严格的正整数。gydF4y2BaintlinproggydF4y2Ba如果发现就停止gydF4y2BaMaxFeasiblePointsgydF4y2Ba整数可行点。gydF4y2Ba 正gydF4y2Ba
MaxTimegydF4y2Ba 正实数是最大时间(以秒为单位gydF4y2BaintlinproggydF4y2Ba运行。gydF4y2Ba 7200gydF4y2Ba
NodeSelectiongydF4y2Ba

选择接下来要探索的节点。gydF4y2Ba

  • “simplebestproj”gydF4y2Ba-最佳投影。看到gydF4y2Ba分支与边界gydF4y2Ba.gydF4y2Ba

  • “minobj”gydF4y2Ba-探索目标函数最小的节点。gydF4y2Ba

  • “mininfeas”gydF4y2Ba-探索具有最小整数不可行性的节点。看到gydF4y2Ba分支与边界gydF4y2Ba.gydF4y2Ba

“simplebestproj”gydF4y2Ba
ObjectiveCutOffgydF4y2Ba 实数大于gydF4y2Ba负gydF4y2Ba.在分枝定界计算过程中,gydF4y2BaintlinproggydF4y2Ba丢弃线性规划解的目标值超过的任何节点gydF4y2BaObjectiveCutOffgydF4y2Ba.gydF4y2Ba 正gydF4y2Ba
ObjectiveImprovementThresholdgydF4y2Ba 负的真实。gydF4y2BaintlinproggydF4y2Ba只有当它定位到另一个目标函数值至少为时,才会改变当前的可行解gydF4y2BaObjectiveImprovementThresholdgydF4y2Ba低:gydF4y2Ba(fold - fnew)/(1 + |fold|) >目标改善阈值gydF4y2Ba.gydF4y2Ba 0gydF4y2Ba
OutputFcngydF4y2Ba

优化函数在事件时调用的一个或多个函数。指定为gydF4y2Ba“savemilpsolutions”gydF4y2Ba、函数句柄或函数句柄的单元格数组。对于自定义输出函数,传递函数句柄。输出函数可以停止求解器。gydF4y2Ba

  • “savemilpsolutions”gydF4y2Ba集合中的整数可行点gydF4y2BaxIntSolgydF4y2Ba矩阵,其中每一列都是一个整数可行点。gydF4y2Ba

有关编写自定义输出函数的信息,请参见gydF4y2Baintlinprog输出函数和图函数语法gydF4y2Ba.gydF4y2Ba

[]gydF4y2Ba
PlotFcngydF4y2Ba

在算法执行时绘制各种进度度量;从预定义的情节中选择或编写自己的。通过gydF4y2Ba“optimplotmilp”gydF4y2Ba、函数句柄或函数句柄的单元格数组。对于自定义绘图函数,传递函数句柄。默认值为none (gydF4y2Ba[]gydF4y2Ba):gydF4y2Ba

  • “optimplotmilp”gydF4y2Ba绘制解的客观值的内部计算的上界和下界。gydF4y2Ba

有关编写自定义绘图函数的信息,请参见gydF4y2Baintlinprog输出函数和图函数语法gydF4y2Ba.gydF4y2Ba

[]gydF4y2Ba
RelativeGapTolerancegydF4y2Ba

真正的从gydF4y2Ba0gydF4y2Ba通过gydF4y2Ba1gydF4y2Ba.gydF4y2BaintlinproggydF4y2Ba如果内部计算的上(gydF4y2BaUgydF4y2Ba)及较低(gydF4y2BalgydF4y2Ba)目标函数上的边界小于或等于gydF4y2BaRelativeGapTolerancegydF4y2Ba:gydF4y2Ba

(U - L)/(|U| + 1) <= RelativeGapTolerancegydF4y2Ba.gydF4y2Ba

请注意gydF4y2Ba

尽管你指定了gydF4y2BaRelativeGapTolerancegydF4y2Ba作为十进制数,迭代显示和gydF4y2Baoutput.relativegapgydF4y2Ba报告差距的百分比,即100倍的测量相对差距。如果退出消息指的是相对差距,则此值是测量的相对差距,而不是百分比。gydF4y2Ba

1的军医gydF4y2Ba
RootLPAlgorithmgydF4y2Ba

求解线性规划的算法:gydF4y2Ba

  • 对偶单纯形的gydF4y2Ba—对偶单纯形算法gydF4y2Ba

  • “primal-simplex”gydF4y2Ba-原始单纯形算法gydF4y2Ba

对偶单纯形的gydF4y2Ba
RootLPMaxIterationsgydF4y2Ba 非负整数,即解决初始线性规划问题的单纯形算法的最大迭代次数。gydF4y2Ba

max(3e4, 10*(numberofe+ numberofin+ numberOfVariables))gydF4y2Ba

在这个表达式中,gydF4y2BanumberOfEqualitiesgydF4y2Ba的行数gydF4y2BaAeqgydF4y2Ba,gydF4y2BanumberOfInequalitiesgydF4y2Ba的行数gydF4y2Ba一个gydF4y2Ba,gydF4y2BanumberOfVariablesgydF4y2Ba的元素个数gydF4y2BafgydF4y2Ba.gydF4y2Ba

例子:gydF4y2Baoptions = optimoptions('intlinprog','MaxTime',120)gydF4y2Ba

结构封装输入和选项,这些输入和选项由以下字段指定。gydF4y2Ba

fgydF4y2Ba 表示目标的向量gydF4y2Baf ' * xgydF4y2Ba(必需)gydF4y2Ba
intcongydF4y2Ba 指示取整数值的变量的向量(必需)gydF4y2Ba
AineqgydF4y2Ba 线性不等式约束下的矩阵gydF4y2BaAineq * xgydF4y2Ba≤gydF4y2BabineqgydF4y2Ba

bineqgydF4y2Ba

线性不等式约束下的向量gydF4y2BaAineq * xgydF4y2Ba≤gydF4y2BabineqgydF4y2Ba

AeqgydF4y2Ba

线性等式约束下的矩阵gydF4y2BaAeq*x = beqgydF4y2Ba

说真的gydF4y2Ba

线性等式约束下的向量gydF4y2BaAeq*x = beqgydF4y2Ba
磅gydF4y2Ba 下界向量gydF4y2Ba
乌兰巴托gydF4y2Ba 上界向量gydF4y2Ba
x0gydF4y2Ba 初始可行点gydF4y2Ba
解算器gydF4y2Ba “intlinprog”gydF4y2Ba(必需)gydF4y2Ba

选项gydF4y2Ba

使用以下方法创建的选项gydF4y2BaoptimoptionsgydF4y2Ba(必需)gydF4y2Ba

您必须在问题结构中至少指定这些字段。其他字段可选:gydF4y2Ba

  • fgydF4y2Ba

  • intcongydF4y2Ba

  • 解算器gydF4y2Ba

  • 选项gydF4y2Ba

例子:gydF4y2Ba问题。f=[12,3.];
Problem.intcon = [2,3];gydF4y2Ba
问题。选项=optimoptions(“intlinprog”);gydF4y2Ba
问题。Aineq=[3,-2,-1];
问题。bineq=20;
问题。磅=[-6.1,-1.2,7.3];
问题。解算器=“intlinprog”;

数据类型:gydF4y2Ba结构体gydF4y2Ba

输出参数gydF4y2Ba

全部折叠gydF4y2Ba

解,作为最小化的向量返回gydF4y2Baf ' * xgydF4y2Ba受制于所有的边界,整数约束和线性约束。gydF4y2Ba

当一个问题是不可行的或无界的,gydF4y2BaxgydF4y2Ba是gydF4y2Ba[]gydF4y2Ba.gydF4y2Ba

目标值,作为标量值返回gydF4y2Baf ' * xgydF4y2Ba在解决方案中gydF4y2BaxgydF4y2Ba.gydF4y2Ba

当一个问题是不可行的或无界的,gydF4y2BafvalgydF4y2Ba是gydF4y2Ba[]gydF4y2Ba.gydF4y2Ba

算法停止条件,返回为整数,用于标识算法停止的原因。的值如下所示gydF4y2BaexitflaggydF4y2Ba以及相应的原因gydF4y2BaintlinproggydF4y2Ba停止了。gydF4y2Ba

3.gydF4y2Ba

解是相对可行的gydF4y2BaConstraintTolerancegydF4y2Ba公差,但就绝对公差而言是不可行的。gydF4y2Ba

2gydF4y2Ba

intlinproggydF4y2Ba过早地停止。整数可行点。gydF4y2Ba

1gydF4y2Ba

intlinproggydF4y2Ba收敛到解决方案gydF4y2BaxgydF4y2Ba.gydF4y2Ba

0gydF4y2Ba

intlinproggydF4y2Ba过早地停止。没有整数可行点。gydF4y2Ba

1gydF4y2Ba

intlinproggydF4y2Ba被输出函数或绘图函数停止。gydF4y2Ba

2gydF4y2Ba

找不到可行点。gydF4y2Ba

3gydF4y2Ba

根LP问题是无界的。gydF4y2Ba

9gydF4y2Ba

求解器失去了可行性。gydF4y2Ba

退出消息可以提供关于原因的更详细信息gydF4y2BaintlinproggydF4y2Ba停止的:停止的,如超过一个公差gydF4y2Ba

ExitflagsgydF4y2Ba3.gydF4y2Ba和gydF4y2Ba9gydF4y2Ba涉及到有很大的不可行性的解决方案。这些问题通常产生于具有大条件数的线性约束矩阵,或具有大解分量的问题。要纠正这些问题,请尝试缩放系数矩阵,消除冗余线性约束,或对变量给出更严格的边界。gydF4y2Ba

解决方案过程摘要,作为包含关于优化过程信息的结构返回。gydF4y2Ba

relativegapgydF4y2Ba

上(gydF4y2BaUgydF4y2Ba)及较低(gydF4y2BalgydF4y2Ba)目标函数的边界,即gydF4y2BaintlinproggydF4y2Ba在其分支定界算法中进行计算。gydF4y2Ba

相对间隙= 100*(U - L) / (abs(U) + 1)gydF4y2Ba

如果gydF4y2BaIntcon = []gydF4y2Ba,gydF4y2BaRelativegap = []gydF4y2Ba.gydF4y2Ba

请注意gydF4y2Ba

尽管你指定了gydF4y2BaRelativeGapTolerancegydF4y2Ba作为十进制数,迭代显示和gydF4y2Baoutput.relativegapgydF4y2Ba报告差距的百分比,即100倍的测量相对差距。如果退出消息指的是相对差距,则此值是测量的相对差距,而不是百分比。gydF4y2Ba

absolutegapgydF4y2Ba

目标函数的上下界之差即gydF4y2BaintlinproggydF4y2Ba在其分支定界算法中进行计算。gydF4y2Ba

如果gydF4y2BaIntcon = []gydF4y2Ba,gydF4y2Baabsolute tegap = []gydF4y2Ba.gydF4y2Ba

numfeaspointsgydF4y2Ba

找到的整数可行点数。gydF4y2Ba

如果gydF4y2BaIntcon = []gydF4y2Ba,gydF4y2BaNumfeaspoints = []gydF4y2Ba.同样,如果初始松弛问题是不可行的,gydF4y2BaNumfeaspoints = []gydF4y2Ba.gydF4y2Ba

numnodesgydF4y2Ba

分支定界算法中的节点数。如果在预处理或初始切割过程中找到了解决方案,gydF4y2BaNumnodes = 0gydF4y2Ba.gydF4y2Ba

如果gydF4y2BaIntcon = []gydF4y2Ba,gydF4y2BaNumnodes = []gydF4y2Ba.gydF4y2Ba

constrviolationgydF4y2Ba

约束违反,对于违反的约束是正的。gydF4y2Ba

Constrviolation = max([0;规范(Aeq * x-beq、正);(lb-x);(x-ub);(Ai * x-bi)])gydF4y2Ba

消息gydF4y2Ba

退出消息。gydF4y2Ba

限制gydF4y2Ba

  • 通常,解决方案的一些假定的整数值组件gydF4y2Bax (intCon)gydF4y2Ba不是精确的整数。gydF4y2BaintlinproggydF4y2Ba将内的所有解值视为整数gydF4y2BaIntegerTolerancegydF4y2Ba整数的。gydF4y2Ba

    若要将所有假定的整数舍入为完全整数,请使用gydF4y2Ba轮gydF4y2Ba函数。gydF4y2Ba

    X (intcon) = round(X (intcon));gydF4y2Ba

    谨慎gydF4y2Ba

    舍入解决方案可能导致解决方案变得不可行的。四舍五入后检查可行性:gydF4y2Ba

    max(A*x - b)gydF4y2Ba%看条目是不是太正,所以有小的不可行性gydF4y2Bamax(Aeq*x - beq))gydF4y2Ba查看条目是否足够接近零gydF4y2BaMax (x - ub)gydF4y2Ba正条目违反了边界gydF4y2Ba最大(lb - x)gydF4y2Ba正条目违反了边界gydF4y2Ba
  • intlinproggydF4y2Ba当解决方案组件的绝对值超过时,是否强制它们为整数值gydF4y2Ba2.1 e9gydF4y2Ba.当你的解决方案有这样的组件时,gydF4y2BaintlinproggydF4y2Ba警告你。如果收到此警告,请检查解决方案,查看解决方案中假定的整数值组件是否接近整数。gydF4y2Ba

  • intlinproggydF4y2Ba不允许问题的组成部分,如系数gydF4y2BafgydF4y2Ba,gydF4y2Ba一个gydF4y2Ba,或gydF4y2Ba乌兰巴托gydF4y2Ba,超过gydF4y2Ba1 e25gydF4y2Ba绝对值。如果你想逃跑gydF4y2BaintlinproggydF4y2Ba有了这样的问题,gydF4y2BaintlinproggydF4y2Ba产生一个错误。gydF4y2Ba

提示gydF4y2Ba

  • 若要指定二进制变量,请将变量设置为中的整数gydF4y2BaintcongydF4y2Ba的下界gydF4y2Ba0gydF4y2Ba的上界gydF4y2Ba1gydF4y2Ba.gydF4y2Ba

  • 通过指定稀疏线性约束矩阵节省内存gydF4y2Ba一个gydF4y2Ba和gydF4y2BaAeqgydF4y2Ba.但是,不能将稀疏矩阵用于gydF4y2BabgydF4y2Ba和gydF4y2Ba说真的gydF4y2Ba.gydF4y2Ba

  • 如果你包括gydF4y2Bax0gydF4y2Ba参数,gydF4y2BaintlinproggydF4y2Ba方法中使用该值gydF4y2Ba“rin”gydF4y2Ba引导潜水启发式直到找到更好的整数可行点。所以当你提供gydF4y2Bax0gydF4y2Ba时,可通过设置gydF4y2Ba“启发式”gydF4y2Ba选项gydF4y2Ba“rins-diving”gydF4y2Ba或者另一种设置gydF4y2Ba“rin”gydF4y2Ba.gydF4y2Ba

  • 为整数分量提供逻辑索引,即二进制向量gydF4y2Ba1gydF4y2Ba表示整数,转换为gydF4y2BaintcongydF4y2Ba形式使用gydF4y2Ba找到gydF4y2Ba.例如,gydF4y2Ba

    Logicalindices = [1,0,0,1,1,0,0];Intcon = find(logicalindexes)gydF4y2Ba
    5 . Intcon = 1 4gydF4y2Ba
  • intlinproggydF4y2Ba替换gydF4y2BabintproggydF4y2Ba.更新旧的gydF4y2BabintproggydF4y2Ba使用的代码gydF4y2BaintlinproggydF4y2Ba,进行以下更改:gydF4y2Ba

    • 集gydF4y2BaintcongydF4y2Ba来gydF4y2Ba1: numVarsgydF4y2Ba,在那里gydF4y2BanumVarsgydF4y2Ba是问题中变量的数量。gydF4y2Ba

    • 集gydF4y2Ba磅gydF4y2Ba来gydF4y2Ba0 (numVars, 1)gydF4y2Ba.gydF4y2Ba

    • 集gydF4y2Ba乌兰巴托gydF4y2Ba来gydF4y2Ba的(numVars, 1)gydF4y2Ba.gydF4y2Ba

    • 更新任何相关选项。使用gydF4y2BaoptimoptionsgydF4y2Ba创建以下选项:gydF4y2BaintlinproggydF4y2Ba.gydF4y2Ba

    • 将电话更改为gydF4y2BabintproggydF4y2Ba如下:gydF4y2Ba

      [x,fval,exitflag,output] = bintprog(f,A,b,Aeq,Beq,x0,options)gydF4y2Ba将您的电话更改为:gydF4y2Ba[x,fval,exitflag,output] = intlinprog(f,intcon,A,b,Aeq,Beq,lb,ub,x0,options)gydF4y2Ba

选择功能gydF4y2Ba

应用程序gydF4y2Ba

的gydF4y2Ba优化gydF4y2Ba活动编辑器任务提供了一个可视化界面gydF4y2BaintlinproggydF4y2Ba.gydF4y2Ba

版本历史gydF4y2Ba

在R2014a中引入gydF4y2Ba

全部展开gydF4y2Ba

Baidu
map