linear-programming - 在 MILP 的调度问题中,我应该将时间作为参数还是变量考虑在内?
问题描述
我正在尝试制定一个问题,该问题将为我的任务完成提供最佳时间表。为了对信息保密,我将我的任务称为需要撰写的论文。这是我的问题的前提。
有320篇论文要写。(所有作家都可以写这些论文)。每篇论文需要不同的时间来完成。
我们有两种类型的工人可以完成这组论文。
我们有150 位作家,他们的职责是实际撰写论文。
我们有25 名搬运工,他们的职责是拿走完成的论文,然后去拿一篇新论文供作者们写。为简单起见,我假设每次完成论文并交付新论文的时间是恒定的。
这个问题的目标是尽量减少与我的员工一起撰写所有这些论文所需的总时间。我们受到以下限制:
- 我们有多少作家同时写论文
- 有多少搬运工可以同时搬运纸张
- 每位搬运工需要 25 分钟为作者搬运一篇论文
- 搬运工不能同时为彼此相距不超过 2 个作家的作家搬运论文(如果作家 3 完成了他的论文并且搬运工开始为他们搬运论文,那么作家 1、2、4 和 5 将不得不等待直到作者 3 的移动器完成移动)。此约束旨在表示我们在设施中的物理限制。
我的方法:
自从我正确地完成 LP 以来已经有一段时间了,所以我生疏了。我已经定义了以下变量,但不确定这些变量是否好。我不知道是否将时间 $t$ 作为这些变量的参数或作为它自己的变量,这就是我主要在努力解决的问题。
$D_j$:完成论文 $j$ 的时间长度。
$S_{j,w}$:作者 $w$ 开始写论文 $j$ 的时间点。
$X_{j,w}$:表示作者 $w$ 是否正在撰写论文 $j$ 的二进制变量。
$M_{m,w}$:移动者 $m$ 是否为作者 $w$ 移动论文
我提出的约束如下:
$\sum_{w \in W} X_{p,w} = 1$
$D_w , S_{p,w} \ge 0$
我正在努力思考如何将时间线作为变量或某个集合或其他因素考虑在内。
编辑:我花了更多时间发现这是这类问题的常见困难(耶!)。要采取的两条路线是将时间视为离散变量或连续变量。虽然精度会很好,但我在设施中拥有的数据是每分钟可用的,所以我认为将时间视为间隔为一分钟的离散变量是合理的。
我希望能够得到一个输出,为我提供一个最佳的论文写作时间表,并让输出告诉我哪些作者在什么时间完成了哪些论文。如果需要任何澄清,我将在评论中尽可能活跃。
注意:我还在 OR.SE 链接上发布了这个问题: https ://or.stackexchange.com/questions/2734/how-to-formulate-scheduling-matrix-problem-with-mixed-integer-linear-programming
我还在 Math.SE 链接上发布了这个:https ://math.stackexchange.com/questions/3384542/should-i-factor-in-time-as-a-parameter-or-a-variable-in-a -调度问题机智
解决方案
推荐阅读
- flutter-layout - 颤动中的“RenderBox未布置”文本字段错误
- python - 如何在由 1D NumPy 数组(Python)中的值表示的索引处获取值为 1 的 2D NumPy 数组
- powershell - 我正在尝试获取 $USNJRNL 文件的 MFT 参考号。我已经转储了信息,但似乎无法解析出我需要的变量
- puppeteer - 如何使用 puppeteer 或 html-pdf 在 RHEL 6 中使用特定于应用程序的字体而不是已安装的字体?
- php - Laravel 在安装 Stripe 时删除了 Fideloper,导致:n Application.php 第 735 行:找不到类 Fideloper\Proxy\TrustedProxyServiceProvider"
- kotlin - 当我在 LazyColumn 中设置stickHeader 或多个项目时,它滚动不正确
- html - 使用图像标签在网页上显示原始像素数组
- reactjs - React 获取 ResponsiveReactGridLayout 中父元素的大小
- c - 输入值时,Scanf() 在 C 中无法正常工作
- mysql - Django 测试 OperationalError 无法创建表