数学建模——整数规划

导论

        数学规划中的变量(部分或全部)限制为整数时,称为整数规划,前者为完全整数规划,后者为混合整数规划。

        求解方法可分为:1分支定界法,2割平面法,2隐枚举法,4匈牙利法,5蒙特卡罗法。下面介绍0-1型整数规划的matlab求解与蒙特卡罗法。

0-1型整数规划

        0-1型整数规划是整数规划中的特殊情形,它的变量x仅取值0或1,称其为0-1变量或二进制变量。在实际问题中,如果引入0-1变量,就可以把有各个情况需要分别讨论的数学规划问题统一在一个问题中讨论了。

整数线性规划的计算机求解

Matlab求解整数线性规划使用如下命令:

[x, fval] = intlinprog(f, intcon, A, b, Aeq, beq, lb, ub);

Matlab在求解数学规划问题中存在一个问题,即只能针对一维决策变量。

指派问题

clear
clc
intcon = 1:25;
c = [3 8 2 10 3; 8 7 2 9 7; 6 4 2 7 5; 8 4 2 3 5; 9 10 6 9 10]; % 指派矩阵
c = c(:);
Aeq = zeros(10, 25);
for i = 1:5
    Aeq(i, (i-1)*5+1:5*i) = 1;
    Aeq(5+i,i:5:25) = 1;
end
beq = ones(10, 1);
xl = zeros(25, 1);
xu = ones(25, 1);
[x, fval] = intlinprog(c, intcon, [], [], Aeq, beq, xl, xu);
x = reshape(x, [5, 5]);

混合整数规划问题

clear
clc
f = [-3; -2; -1]; intcon = 3;
A = ones(1, 3); b = 7;
Aeq = [4 2 1]; beq = 12;
xl = zeros(3, 1); xu = [inf; inf; 1];
[x, fval] = intlinprog(f, intcon, A, b, Aeq, beq, xl, xu);

蒙特卡洛算法

        整数规划由于限制变量为整数而增加了难度,但又由于整数解是有限个,为枚举法提供了方便。

clear
clc
p0 = 0;
x = randi([0, 99], 1, 5);
tic
for i = 1:10^7
    x = randi([0, 99], 1, 5);
    [f, g] = mengte(x);
    if all(g <= 0)
        if p0 < f
            x0 = x; p0 = f;
        end
    end
end
x0,p0
toc

function [f, g] = mengte(x)
f = x(1)^2 + x(2)^2+ 3*x(3)^2 + 4*x(4)^2 + 2*x(5)^2 - 8*x(1) - 2*x(2) - 3*x(3) - x(4) - 2*x(5);
g = [sum(x) - 400; x(1) + 2*x(2) + 2*x(3) + x(4) + 6*x(5) - 800; 2*x(1) + x(2) + 6*x(3) - 200; x(3) + x(4) + 5*x(5) - 200];
end

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值