Matlab 指派问题模型代码
指派问题的基本内容
一般来说指派问题解决的是如何将任务分配到人, 使得任务完成的效益最大化 (成本型效益则求最小值, 利润型效益则求最大值). 上述问题一个 0 - 1 整数规划问题.
问题围绕着任务和人展开, 即存在着 m 个任务, 以及 n 个人. 每个人处理每个任务都会有对应的效益, 将所有人的情况写在一起, 就组成了一个 m*n 的效益矩阵.
当 m = n 时, 即此时, 任务数和人数相等, 那么每个人都会处理一项任务, 存在如下约束:
对于任务来说, 每个任务必须分配一个人;
对于人来说, 每个人必须分配一个任务.
类似的, 当 m
对于任务来说, 每个任务必须分配一个人;
对于人来说, 每个人可能会被分配到一个任务, 也可能没有分配到任务.
当 m> n 时, 任务数大于人数, 则存在如下约束:
对于任务来说, 每个任务必须分配一个人;
对于人来说, 每个人可能会被分配到一个或者多个任务, 但最多不超过任务总数.
模型调用形式
[x,min_fval,exitflag] = myTaskArrange2(f)
调用说明:
输入变量为一个 m*n 的效益矩阵, 其中 m 行为 m 个任务, n 列为 n 个人.
输出变量 x 为与效益矩阵同型的 0-1 矩阵, 1 表示被安排, 0 表示不被安排; min_fval 为最优目标值; exitflag 为退出标识符, 一般等于 1 表示解收敛.
模型代码
function [x,min_fval,exitflag] = myTaskArrange2(f)
%% 程序功能说明
% 求解不平衡任务指派问题
%==== 输入参数 ===&