matlab线性平面映射求通项_基于Matlab解决m个人n项任务的最优分派

本文介绍了如何使用Matlab解决m个人n项任务的最优分派问题,包括最大效益和最小成本的匹配策略。通过建立线性规划模型,并提供相关Matlab程序,展示了一人一项任务和人数多于任务情况下的求解方法。
摘要由CSDN通过智能技术生成

基于Matlab解决m个人\n项任务的最优分派[摘要]对图论中二元匹配问题及其不同要求下的最优匹配问题,在线性规划的理论基础上,基于Matlab软件,给出最大效益或最小成本的求解程序及运行命令。具有较广泛和很方便的实际应用价值。

[关键词]二元匹配邻接矩阵最大效益分派最小成本分派Matlab程序命令

在现实中有多种多样的分派(匹配)问题,他们的共同特征是:在满足一定的分派条件的前提下,通过制定分派方案以达到总体效益最佳的目的。本文就解决m个人、n项工作的最优分派方案为目的,基于Matlab软件给出的计算程序具有运行速度快、命令简洁,并且对较多类型的分派问题均可求解,在实际应用中具有可操作性。

设二元匹配的邻接矩阵为W,其中:cij表示xi人做yj项工作的效益(或表示yj项由xi人完成所付的成本);再设决策变量xij=1:第i个人做第j项工作(任务);或xij=0:第i个人不做第j 项工作(任务)。根据线性规划可建立如下所示的数学模型,其中:k为每个人所承担的任务项数,t为执行每项任务所需要的人数。

一、一人一项任务的分派问题

这种分派(匹配)问题,是指每个人最多只能承担一项任务,并且每项任务最多只能由一个人承担;建立该类问题的数学模型时,只需在上面数学模型中(1)和(2)取等式,且k=t=1即可。为应用方便,先建立三个m—文件(源码、程序及命令在Matlab 6.5.1检验通过),再分别讨论这类问题。

第一个M—文件matrixGenerator.m如下:

function array = matrixGenerator(len)

array = zeros(2 * len, len ^ 2);for row = 1 : len;for ind = 1 : len;

array(row, ind + (row - 1) * len) = 1; end, end,for row = len + 1 : len * 2;

for ind = 1 : len;array(row, (row - len) + (ind - 1) * len) = 1; end, end

第二个M—文件ipslvWraper.m为:

function [x, how] = ipslvWraper(W)

W=W'; a=W(:);a=a';valueMat=-a;len = length(valueMat);base = sqrt(len);

if floor(base) ~= base;sprintf('价值系数的个数不能开平方而得到整数,参数错误!\n');

how = 0; x = []; return; end,A = matrixGenerator(base);intlist = ones(1,len);

B = ones(2*base, 1);ctype = zeros(2*base, 1);xm = zeros(len,1);xM = ones(len,1);

[x,how] = ipslv_mex(valueMat,A,B,intlist,xM,xm,ctype);how,z = valueMat*x,x = x';

result = zeros(base, base);for i = 1 : len;result(i) = x(i);end,result'

第三个M—文件ipslv_mex.m在免费工具箱lpsolve文件夹中,可以由MathWorks公司网站下载lpsolve文件夹。

1. 人数与任务的项数相等(m=n)

此时每人必须承担一项任务,且每项任务由且仅由一人承担。

在Matlab运行窗口中输入以下运行命令:

clear, W=[2 3 5 1 7;2 5 4 6 3;4 2 6 3 8;3 4 2 1 5;6 8 9 4 7]; [x, how] = ipslvWraper(W);

(若由邻接矩阵求成本最小的匹配,W = -W即可。)返回的结果为:

how = 0z = -30(最优值为-z = 30,若求成本最小的匹配,返回中最优值为z。)

2. 人数多于任务的项数(m > n)

此时每人最多承担一项任务,且每项任务由且仅由一人承担。人数m多于任务数n,增添m-n列,其元素均为0,构成方阵(a);即虚构m-n项任务。执行这些虚构的任务的效率为0,在求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值