matlab 0-1规划求解指派问题

指派问题可以用匈牙利算法,嫌代码太长,用0-1整数规划,matlab求解很方便,另外lingo也特别方便

参照问题如下:

这里写图片描述
用0-1整数规划可建立如下模型,截的图排版有些,,,,但不影响:
这里写图片描述

matlab代码如下,我码了这么多注释纯属心情太好,业界良心!!!(对于参加数模懂编程但又不太熟练matlab的同学非常好):

%0-1规划求指派问题
function [y,fval]=zhipai(C)%C为指派n*n系数矩阵
C=C';
f=C(:);%生成一个列向量,作为目标函数系数,matlab默认以列排序
[m,n]=size(C);
Aeq=zeros(2*n,n*n);%2*n个等式约束,n*n个变量
for i=1:n  %这里先生成的是后四个等式约束的左端项
    Aeq(1:n,1+(i-1)*n:i*n)=eye(n,n);
end
for i=1:n  %前四个等式约束左端项
    Aeq(i+n,1+(i-1)*n:i*n)=ones(1,n);
end
beq=ones(2*n,1);
lb=zeros(n*n,1);
ub=ones(n*n,1);
x=linprog(f',[],[],Aeq,beq,lb,ub);%线性规划函数
y=reshape(x,n,n);%将上式求出的x值变成n阶矩阵
y=y';%上式生成的是按列排列的,所以转致一下
y=round(y);%对y元素取整,生成匹配矩阵
sol=zeros(n,n);
for i=1:n
    for j=1:n
        if y(i,j)==1
            sol(i,j)=C(j,i);%匹配矩阵
        end
    end
end
fval=sum(sol(:));%极小值的目标函数值

一会上传一个匈牙利算法的M文件,想要的可以下。妈的要睡觉了,刚歇了一天,明儿又要为期四天的数模训练了,,,,,,

  • 90
    点赞
  • 319
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值