基于Syslab求解优化问题vunknown

基于Syslab求解优化问题

版本 unknown · 52 节

第 1 页


第 2 页


第 3 页


第 4 页


第 5 页


第 6 页


第 7 页


第 8 页


第 9 页


第 10 页


第 11 页


第 12 页


第 13 页


第 14 页


第 15 页


第 16 页


第 17 页


第 18 页


第 19 页


第 20 页


第 21 页


第 22 页


第 23 页


第 24 页


第 25 页


第 26 页


3.2.3 整数规划例题解析1

在本例题中,我们将通过一个典型的整数规划问题,演示如何在 Syslab 中使用 Intlinprog 函数进行求解。该函数专门用于处理目标函数和约束条件均为线性,但决策变量要求为整数的优化问题。

假设我们面临如下整数规划问题:

  • 目标函数:最小化 ( z = -x_1 - 2x_2 )
  • 约束条件: [ \begin{cases} x_1 + x_2 \leq 40 \ 2x_1 + x_2 \leq 60 \ x_1, x_2 \geq 0 \end{cases} ]
  • 变量类型:( x_1, x_2 ) 均为整数

该问题的数学模型可写为:

整数线性规划标准形式
最小化 ( f^T x ),满足 ( A \cdot x \leq b ),且 ( x ) 为整数向量。

其中,( f = [-1, -2]^T ),( A = [1, 1; 2, 1] ),( b = [40, 60]^T )。

操作步骤

  1. 定义问题参数
    在 Syslab 的命令行或脚本中,首先输入目标函数的系数向量和约束矩阵:

    f = [-1; -2]
    A = [1 1; 2 1]
    b = [40; 60]
    
  2. 调用 Intlinprog 函数
    使用 Intlinprog 函数指定整数变量索引。由于两个变量均为整数,设置 intcon = [1, 2]

    x = Intlinprog(f, A, b; intcon=[1,2])
    

    该函数会自动搜索满足整数约束的可行解,并返回使目标函数最小的整数点。

  3. 查看求解结果
    执行后,Syslab 会输出最优解向量 x。预期结果为:

    x = [20; 20]
    

    即 ( x_1 = 20, x_2 = 20 ),此时目标函数值 ( z = -1 \times 20 - 2 \times 20 = -60 )。

  4. 验证约束条件
    检查解是否满足所有约束:

    • ( 20 + 20 = 40 \leq 40 )(边界)
    • ( 2 \times 20 + 20 = 60 \leq 60 )(边界) 说明该解位于可行域的顶点上,且为整数最优解。

结果分析

本例中,整数约束并未改变线性规划松弛解的最优性(若不做整数约束,最优解同样为 (20,20))。但在许多实际问题中,整数约束会导致最优解偏移或产生多个候选解。Intlinprog 函数采用分支定界算法,能够高效处理此类问题。

整数规划可行域与最优解示意MWORKS

上图展示了该问题的可行域(由两条直线围成的多边形)以及整数网格点。红色圆点标记了最优整数解 (20,20),它恰好位于约束边界上。

通过本例,您已掌握在 Syslab 中利用 Intlinprog 求解整数线性规划的基本流程。下一节将介绍带有更多整数变量和混合整数类型的复杂案例。


第 28 页


第 29 页


第 30 页


第 31 页


第 32 页


第 33 页


第 34 页


第 35 页


第 36 页


第 37 页


第 38 页


第 39 页


第 40 页


第 41 页


第 42 页


第 43 页


第 44 页


第 45 页


第 46 页


第 47 页


第 48 页


第 49 页


第 50 页


第 51 页


第 52 页