主要内容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是整数,gydF4y2Ba* x≤bgydF4y2Ba.gydF4y2Ba

xgydF4y2Ba= intlinprog (gydF4y2BafgydF4y2Ba,gydF4y2BaintcongydF4y2Ba,gydF4y2Ba一个gydF4y2Ba,gydF4y2BabgydF4y2Ba,gydF4y2BaAeqgydF4y2Ba,gydF4y2Ba说真的gydF4y2Ba)gydF4y2Ba在满足等式约束的同时解决了上述问题gydF4y2BaAeq * x =说真的gydF4y2Ba.集gydF4y2Ba一个= []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而且gydF4y2Ba说真的= []gydF4y2Ba如果不存在等式。gydF4y2Ba

例子gydF4y2Ba

xgydF4y2Ba= intlinprog (gydF4y2BafgydF4y2Ba,gydF4y2BaintcongydF4y2Ba,gydF4y2Ba一个gydF4y2Ba,gydF4y2BabgydF4y2Ba,gydF4y2BaAeqgydF4y2Ba,gydF4y2Ba说真的gydF4y2Ba,gydF4y2Ba磅gydF4y2Ba,gydF4y2Ba乌兰巴托gydF4y2Ba,gydF4y2Bax0gydF4y2Ba)gydF4y2Ba使用初始可行点进行优化gydF4y2Bax0gydF4y2Ba.集gydF4y2Ba磅= []gydF4y2Ba而且gydF4y2Ba乌兰巴托= []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 < =gydF4y2Ba用"大于"不等式乘以gydF4y2Ba-1gydF4y2Ba.gydF4y2Ba

一个=[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

一个= (1 1 1);b = 7;gydF4y2Ba

写出线性等式的约束条件。gydF4y2Ba

Aeq =[4、2、1];说真的= 12;gydF4y2Ba

写出绑定约束。gydF4y2Ba

磅= 0 (3,1);乌兰巴托=[正,正无穷;1];gydF4y2Ba%强制x(3)为二进制gydF4y2Ba

调用gydF4y2BaintlinproggydF4y2Ba.gydF4y2Ba

x = intlinprog (f intcon A、b Aeq,说真的,磅,乌兰巴托)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 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;1磅= 0 (N);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,说真的,磅);gydF4y2Ba
LP:最优目标值为1554.047531。切割生成:应用8强CG切割。下界为1591.000000。分支与定界:节点总数int整数相对探测时间(s)解决方法缺口(%)10000 0.91 0 - - 18025 1.45 1 2.906000e+03 4.509804e+01 21857 1.81 2 2.0073000e +03 2.270974e+01 23544 1.96 3 1.854000e+03 1.180593e+01 24097 2.02 3 1.854000e+03 1.617251e+00 24293 2.03 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)解决方法缺口(%)3627 0.50 2 2.154000e+03 2.593968e+01 5844 0.71 3 1.854000e+03 1.180593e+01 6204 0.74 3 1.854000e+03 1.455526e+00 6400 0.76 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;一个= (1 1 1);b = 7;Aeq =[4、2、1];说真的= 12;磅= 0 (3,1);乌兰巴托=[正,正无穷;1];gydF4y2Ba%强制x(3)是二进制的gydF4y2Bax0 = [];gydF4y2Ba

指定不显示。gydF4y2Ba

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

运行的能手。gydF4y2Ba

x = intlinprog (f intcon A、b Aeq,说真的,磅,乌兰巴托,x0,选项)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);概率= optimproblem (gydF4y2Ba“目标”gydF4y2Ba3 * x (1) 2 * (2) xb);con1 = sum(x) + xb <= 7;con2 = 4*x(1) + 2*x(2) + xb == 12;prob.Constraints。cons1 = cons1;prob.Constraints。cons2 = cons2;gydF4y2Ba

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

问题= prob2struct(概率);gydF4y2Ba

解决产生的问题结构。gydF4y2Ba

[溶胶,fval exitflag、输出]= intlinprog(问题)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 constrbreach: 0 message: '找到最佳解决方案....'gydF4y2Ba

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

概率。变量gydF4y2Ba
ans =gydF4y2Ba结构体字段:gydF4y2Bax: [2 x1 optim.problemdef。优化变量]xb: [1x1优化.problemdef.OptimizationVariable]gydF4y2Ba

的变量gydF4y2BaxbgydF4y2Ba最后出现在gydF4y2Ba变量gydF4y2Ba显示,所以gydF4y2BaxbgydF4y2Ba对应于gydF4y2Ba索尔(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;一个= (1 1 1);b = 7;Aeq =[4、2、1];说真的= 12;磅= 0 (3,1);乌兰巴托=[正,正无穷;1];gydF4y2Ba%强制x(3)是二进制的gydF4y2Ba

调用gydF4y2BaintlinproggydF4y2Ba与所有输出。gydF4y2Ba

[x, fval exitflag、输出]= intlinprog (f intcon A、b Aeq,说真的,磅,乌兰巴托)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 constrbreach: 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 < =gydF4y2Ba,gydF4y2Ba

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

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

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

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

= [1, 2, 3, 4, 5, 6);b =(10、20、30);gydF4y2Ba

例子:gydF4y2Ba要指定x分量的总和为1或更少,请取gydF4y2Ba一个= 1 (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 < =gydF4y2Ba,gydF4y2Ba

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

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

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

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

= [1, 2, 3, 4, 5, 6);b =(10、20、30);gydF4y2Ba

例子:gydF4y2Ba要指定x分量的和为1或更小,请使用gydF4y2Ba一个= 1 (1,N)gydF4y2Ba而且gydF4y2Bab = 1gydF4y2Ba.gydF4y2Ba

数据类型:gydF4y2Ba双gydF4y2Ba

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

AeqgydF4y2Ba编码gydF4y2Ba我gydF4y2Ba线性等式gydF4y2Ba

Aeq * x =说真的gydF4y2Ba,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];说真的=(10、20);gydF4y2Ba

例子:gydF4y2Ba要指定x分量的和为1,取gydF4y2BaAeq = 1 (1, N)gydF4y2Ba而且gydF4y2Ba说真的= 1gydF4y2Ba.gydF4y2Ba

数据类型:gydF4y2Ba双gydF4y2Ba

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

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

Aeq * x =说真的gydF4y2Ba,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];说真的=(10、20);gydF4y2Ba

例子:gydF4y2Ba要指定x分量的和为1,使用gydF4y2BaAeq = 1 (1, N)gydF4y2Ba而且gydF4y2Ba说真的= 1gydF4y2Ba.gydF4y2Ba

数据类型:gydF4y2Ba双gydF4y2Ba

下界,指定为向量或双精度值数组。gydF4y2Ba磅gydF4y2Ba中元素的下界gydF4y2Ba磅gydF4y2Ba≤gydF4y2BaxgydF4y2Ba≤gydF4y2Ba乌兰巴托gydF4y2Ba.gydF4y2Ba

在内部,gydF4y2BaintlinproggydF4y2Ba将一个数组gydF4y2Ba磅gydF4y2Ba的向量gydF4y2Ba磅(:)gydF4y2Ba.gydF4y2Ba

例子:gydF4y2Ba磅=[0;无穷;4)gydF4y2Ba意味着gydF4y2Bax(1)≥0gydF4y2Ba,gydF4y2Bax(3)≥4gydF4y2Ba.gydF4y2Ba

数据类型:gydF4y2Ba双gydF4y2Ba

上界,指定为vector或double类型数组。gydF4y2Ba乌兰巴托gydF4y2Ba中elementwise的上界gydF4y2Ba磅gydF4y2Ba≤gydF4y2BaxgydF4y2Ba≤gydF4y2Ba乌兰巴托gydF4y2Ba.gydF4y2Ba

在内部,gydF4y2BaintlinproggydF4y2Ba将一个数组gydF4y2Ba乌兰巴托gydF4y2Ba的向量gydF4y2Ba乌兰巴托(:)gydF4y2Ba.gydF4y2Ba

例子:gydF4y2Ba乌兰巴托= (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*(numberofequality + numberofinequequ+ 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输出函数和Plot函数语法gydF4y2Ba.gydF4y2Ba

[]gydF4y2Ba
PlotFcngydF4y2Ba

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

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

有关编写自定义plot函数的信息,请参见gydF4y2Baintlinprog输出函数和Plot函数语法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*(numberofequality + numberofinequequ+ numberOfVariables))gydF4y2Ba

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

例子:gydF4y2Ba选择= optimoptions(‘intlinprog’,‘MaxTime’,120)gydF4y2Ba

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

fgydF4y2Ba 向量代表客观gydF4y2Baf ' * xgydF4y2Ba(必需)gydF4y2Ba
intcongydF4y2Ba 表示接受整数值的变量的向量(必需)gydF4y2Ba
AineqgydF4y2Ba 矩阵的线性不等式约束gydF4y2BaAineq * xgydF4y2Ba≤gydF4y2BabineqgydF4y2Ba

bineqgydF4y2Ba

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

AeqgydF4y2Ba

矩阵的线性等式约束gydF4y2BaAeq * x =说真的gydF4y2Ba

说真的gydF4y2Ba

向量在线性等式的约束下gydF4y2BaAeq * x =说真的gydF4y2Ba
磅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

relativegap = 100*(U - L) / (abs(U) + 1)gydF4y2Ba

如果gydF4y2Baintcon = []gydF4y2Ba,gydF4y2Barelativegap = []gydF4y2Ba.gydF4y2Ba

请注意gydF4y2Ba

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

absolutegapgydF4y2Ba

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

如果gydF4y2Baintcon = []gydF4y2Ba,gydF4y2Baabsolutegap = []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) =圆(x (intcon));gydF4y2Ba

    谨慎gydF4y2Ba

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

    马克斯(A * x - b)gydF4y2Ba看条目是否太积极,所以有小的不可行性gydF4y2Ba马克斯(abs (Aeq * x - beq))gydF4y2Ba查看条目是否足够接近于零gydF4y2Ba马克斯(x -乌兰巴托)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 =找到(logicalindices)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、输出]= bintprog (f, A、b Aeq,说真的,x0,选项)gydF4y2Ba%将您的呼叫更改为:gydF4y2Ba[x, fval exitflag、输出]= intlinprog (f intcon A、b Aeq,说真的,磅,乌兰巴托,x0,选项)gydF4y2Ba

选择功能gydF4y2Ba

应用程序gydF4y2Ba

的gydF4y2Ba优化gydF4y2BaLive Editor任务提供了一个可视化的界面gydF4y2BaintlinproggydF4y2Ba.gydF4y2Ba

版本历史gydF4y2Ba

介绍了R2014agydF4y2Ba

全部展开gydF4y2Ba

Baidu
map