用Octave计算整数规划问题(混合整数规划)
广告
{{v.name}}
例子:
\(
\max\ Z = 10x_1 + 6x_2 + 4x_3 \\
\)
\(
s.t.
\begin{cases}
x_1 + x_2 + x_3 \le 100 \\
10x_1 + 4x_2 + 5x_3 \le 600 \\
2x_1 + 2x_2 + 6x_3 \le 300 \\
x_1 \ge 0且为整数 \\
x_2,x_3 \ge 0
\end{cases}
\)
定义目标函数系数(max Z = 10x1 + 6x2 + 4x3),代码如下:
>> c = [10, 6, 4]';
定义约束系数矩阵 A,代码如下:
>> A = [ 1, 1, 1;
10, 4, 5;
2, 2, 6];
定义约束右端项 b,代码如下:
>> b = [100, 600, 300]';
定义变量下界,代码如下:
>> lb = [0, 0, 0]';
变量无上界,代码如下:
>> ub = [];
定义约束类型:3个约束都是 ≤,对应 'UUU',代码如下:
>> ctype = "UUU";
定义变量类型:第1个变量是整数变量,对应 'ICC',代码如下:
>> vartype = "ICC";
定义优化方向:最大化模型(-1),代码如下:
>> s = -1;
定义解算器为单纯形法(默认就是单纯形法),代码如下:
>> param.lpsolver = 1;
定义单纯形法迭代次数为最大100次,代码如下:
>> param.itlim = 100;
求解,代码如下:
>> [xmin, fmin, status, extra] = ...
glpk (c, A, b, lb, ub, ctype, vartype, s, param)
xmin =
33
67
0
fmin = 732
status = 0
extra =
scalar structure containing the fields:
time = 0
status = 5