1. intlinprog介绍
intlinprog是matlab中用于求解混合整数线性规划(Mixed-integer linear programming)的一个函数,用法基本和linprog差不多
这是关于该函数一份文档的说明截图 文档详情点这里 
英语八级的随便看,不想看的请听我细细道来。
intlinprog函数有九个参数
大多数求解线性规划问题时,只用到前面8个参数,所以这里,我就详细的讲解前面8个参数的含义
f :目标函数的系数矩阵
intcon :整数所在位置
A :不等式约束的变量系数矩阵
b :不等式约束的资源数
Aeq :等式约束的变量系数矩阵
beq :等式约束的资源数
lb :变量约束下限
ub :变量约束上限
咱就话不多说,直接上例子和代码
2. 实例和代码
2.1 例题:求最大值
- 根据函数的使用要求:求最大值,首先要把目标函数转化为最小值,即min z = - (2x+3y);
- 要把大于等于转换为小于等于,即在有 “≥” 符号式子两边同时乘以-1;
实际代码如下:
f = [-2 -3]; % 目标函数的系数矩阵
intcon = []; % 整数所在位置,题目没有要求,所以是空
A = [2, -1; -1, 1; -1, -1]; % 不等式约束的变量系数矩阵
b = [2; 1; -1]; % 不等式约束的资源数
[x,fval] = intlinprog(f, intcon, A, b); % fval代表最优解处的函数值
x, fval = -fval % 返回最大值的结果
运行结果如下;
2.2 例题:求0-1规划下的最小值
- 要把大于等于转换为小于等于,即在有 “≥” 符号式子两边同时乘以-1;
- 对于0-1规划问题,加上限制条件即可
代码如下:
f = [7 5 9 6 3];
intcon = [1, 2, 3, 4, 5]; % 这个表示限制变量集x1 x2 x3 x4 x5都是整数。另外,个人觉得数组的值,用1表示整数,0表示不限制,数组的下标表示第几个结果限制为整数,更贴合编程逻辑,比如[1,1,1,1,1] 表示变量集都限制为整数。但是该函数貌似并未那么做
A = [56, 20, 54, 42, 15; 1, 4, 1, 0, 0; -1, -2, 0, -1, -2];
b = [100; 4; -2];
lb = zeros(5, 1); % 生成5×1的 0 矩阵
ub = ones(5, 1); % 生成5×1的 1 矩阵
[x, fval] = intlinprog(f, ic, A, b, [], [], lb, ub)
变量的下限是0,上限是1,同时限制了变量是整数。这就是0-1整数规划。其他的规划,读者也可以自己推
结果如下:
怎么样,是不是很简单?
补充说明:使用intlinprog函数时,如果没有该参数所对应的限制条件,是用 [] 符号代替,不可以不写(在不打乱intlinprog函数参数顺序的前提下,如果后面都是[],可以省略不写)
如果觉得对你有用,那就点个赞把😀~
参考来自: