非整形线性规划:
题目
c = [13; 9; 10; 11; 12; 81]; % 目标函数的系数向量
A = [0.4,1.1,1, 0, 0, 0;
0, 0, 0, 0.5, 1.2, 1.3];
b = [800;900];
Aeq = [1,0,0,1,0,0;0,1,0,0,1,0;0,0,1,0,0,1]; % 没有等式约束
beq = [400;600;500];
lb = zeros(6,1); % 变量下界,所有变量都从0开始
ub = Inf(6,1); % 变量上界 若上界不存在就为inf无穷大 若为1 就是One
% 定义整数变量的索引
[x, fval] = linprog(c, A, b, Aeq, beq, lb, ub);
disp('最优解为:');
disp(x);
disp('最小值为:');
disp(fval);
注意事项
linprog 函数默认是求最小值 如果要求最大值 目标函数矩阵就要加上负号
因为负数最小值 就是绝对值最大值 即为所求最大值
同时约束条件默认 小于等于
整形规划(01规划)
题目:
解题:
步骤1:(设置变量和初始化)现在设9个变量 x1代表微积分 x2代表线性
代数 x3代表最优化方法 x4代表数据结构 x5代表应用统计 x6代表计算机
模拟 x7代表计算机编程 x8代表预测理论 x9代表数学实验
步骤2:(设置边界-上界与下界)
lb = [0; 0; 0; 0; 0; 0; 0; 0; 0]; % 变量下界
ub = [1; 1; 1; 1; 1; 1; 1; 1; 1]; % 变量上界为空
步骤3:确定决策条件:
x1+x2+x3+x4+x5>=2
X3+x5+x6+x8+x9>=3
x4+x6+x7+x9>=2
x1+x2-2x3 >=0
X7-x4>=0
x1+x2-2x5>=0
x7-x6>=0
x5-x8>=0
x1+x2-2*x9>=0
步骤4:求目标函数 min(x1+x2+x3+x4+x5+x6+x7+x8+x9)
matlab程序:
c = [1,1,1,1,1,1,1,1,1]; % 目标函数的系数向量
A = -[1,1,1,1,1,0,0,0,0;
0,0,1,0,1,1,0,1,1;
0,0,0,1,0,1,1,0,1;
1,1,-2,0,0,0,0,0,0;
0,0,0,-1,0,0,1,0,0;
1,1,0,0,-2,0,0,0,0;
0,0,0,0,0,-1,1,0,0;
0,0,0,0,1,0,0,-1,0;
1,1,0,0,0,0,0,0,-2];
b = -[2; 3; 2; 0; 0; 0; 0; 0; 0];
Aeq = []; % 没有等式约束
beq = [];
lb = zeros(9,1); % 变量下界,所有变量都从0开始
ub = ones(9,1); % 变量上界,所有变量最大为1
% 定义整数变量的索引
intcon = 1:9;
[x, fval] = intlinprog(c, intcon, A, b, Aeq, beq, lb, ub);
disp('最优解为:');
disp(x);
disp('最小值为:');
disp(fval);
结果:
注意事项:
%如果是整形求解就用intlinprog函数,加上intcon参数
%intcon(6,1)
%intlinprog(。。。。。)
其余的细节和非整形线性规划差不多