数学建模:整数规划-匈牙利算法-指派问题-matlab代码理解

在第二步中,当所有的(1)都被早晚之后才开始进行(2)的进行,如果第二步进行完之后,所画圈的数字个数,和阶数相同,则找到目标矩阵

代码如下

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(:);% 把矩阵c转化为向量 [3;8;2;10;3......]
a=zeros(10,25);% 创建10*25的零矩阵 可以将zeros换为ones\twos...  5行+5列=10 列向量25个
for i=1:5
    a(i,(i-1)*5+1:5*i)=1;
    %对应转化为列向量之后的c,确保每一个约束条件之和为1,例如i=1时
    %上面一行代码 将第一行化为1 1 1 1 1 0 0 0 0...
    %意义是X1+X2+X3+X4+X5=1确保约束条件为1 

    a(5+i,i:5:25)=1;
    %确保每一行的第n个元素系数为1,且约束条件之和为1
    %例如第六行控制第一列(每一行第一个元素)系数为一,第六列约束条件之和为1
    % 参考下方的a
end

% a = [ 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
%       0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
%       0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0;
%       0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0;
%       0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1;
%       1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0;
%       0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0;
%       0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0;
%       0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0;
%       0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1];

b=ones(10,1); %表示矩阵a*列矩阵c结果都为1,即每一行每一列的约束条件之和都是1
[x,y]=linprog(c,[],[],a,b,zeros(25,1),ones(25,1));% 0为下界,1为上界
X=reshape(x,5,5);%重塑解向量,将x排列成5*5的矩阵
opt=y;%最优解耗费的最小值

模板代码如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熟人看不到

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值