运筹学经典问题(一):指派问题

问题描述

有 N N N个任务,需要 N N N个人去完成,每个人完成不同工作的效率不同(或者资源、收益等等),需要怎么分配使得整体的效率最高(成本最低等等)呢?这就是经典的指派问题啦!

数学建模

我们首先做以下定义:
I I I: 人的集合;
J J J: 任务的集合;
c i j c_{ij} cij: 把任务 j j j分配给 i i i的成本;

x i j x_{ij} xij: 是否把任务 j j j分配给 i i i,0-1变量;

m i n ∑ i ∈ I ∑ j ∈ J x i j c i j s . t ∑ i ∈ I x i j = 1 , ∀ j ∈ J ∑ j ∈ J x i j = 1 , ∀ i ∈ I min \sum_{i \in I} \sum_{j \in J}x_{ij}c_{ij} \\ s.t \sum_{i \in I}x_{ij}=1, \forall j\in J\\ \sum_{j \in J}x_{ij}=1, \forall i\in I\\ mini∈I∑j∈J∑xijcijs.ti∈I∑xij=1,∀j∈Jj∈J∑xij=1,∀i∈I

目标函数表示最小化成本,第一行约束表示每个任务只能分配给一个人,第二行约束表示每个人只能被分配一个任务。

整数最优解特性

即使把变量 x e x_{e} xe松弛成 0 ≤ x e ≤ 1 0 \leq x_e \leq1 0≤xe≤1,原问题变成线性规划,该问题仍然存在整数最优解。

模型求解

方式一 :将模型直接扔给求解器(Gurobi、Cplex)等求解就可以啦!如果对求解运筹模型时如何选择求解器有疑问的小伙伴,可以参考我的文章如何选择合适的求解器
后面再补充python实现的代码(todo)

方式二:对算法求解速度有更高要求的,可以通过匈牙利算法、Ford-Fulkerson算法(FFA)等求解。

相关推荐
qq_41712925几秒前
C++中的桥接模式变体
开发语言·c++·算法
开源技术14 分钟前
如何将本地LLM模型与Ollama和Python集成
开发语言·python
weixin_4370446414 分钟前
Netbox批量添加设备——堆叠设备
linux·网络·python
我有医保我先冲15 分钟前
AI 时代 “任务完成“ 与 “专业能力“ 的区分:理论基础、行业影响与个人发展策略
人工智能·python·机器学习
林深现海15 分钟前
【刘二大人】PyTorch深度学习实践笔记 —— 第一集:深度学习全景概述(超详细版)
pytorch·笔记·深度学习
YuTaoShao36 分钟前
【LeetCode 每日一题】3010. 将数组分成最小总代价的子数组 I——(解法二)排序
算法·leetcode·排序算法
测试开发Kevin1 小时前
小tip:换行符CRLF 和 LF 的区别以及二者在实际项目中的影响
java·开发语言·python
爱学习的阿磊1 小时前
使用PyTorch构建你的第一个神经网络
jvm·数据库·python
阿狸OKay1 小时前
einops 库和 PyTorch 的 einsum 的语法
人工智能·pytorch·python
编码者卢布2 小时前
【Azure Storage Account】Azure Table Storage 跨区批量迁移方案
后端·python·flask