我有一个线性模型,试图以最佳方式在“单元格”之间移动“单位”。每次转账费用为2美元加上转账单位金额的1%。
让我们说目标细胞需要100个单位,并且可以从10个源细胞中的任何一个接收它。如何鼓励优化器从其中一个源单元单次传输100个单元(总成本2 + 1),而不是从每个有效源单元传输10个单元(总成本20 + 1)?
如果重要的话,我已经使用mosek在matlab中实现了这一点。
(道歉,如果这个问题有点模糊,这都是自学成才,我不知道如何明确地用正确的术语来解答这个问题。如果有的话,很乐意将这个问题重新发布在更合适的SE上。 )
答案 0 :(得分:3)
这是一个标准的整数编程,称为固定电荷运输问题。
假设有S
个供应商和D
客户有需求。
每个供应商i
都有S_i
个单位,每个客户j
都有一个需求D_j
您需要两种类型的决策变量。
Xij
是从供应商i到客户j的金额。 Fij = 2
(每个供应单位的供应商需要2美元。)让固定成本变量为
Y_ij = 1
如果供应商i向客户j发送非零数量的单位。 Y_ij = 0
否则。Objective Minimize sum of all Subsets.
Min sum (F_ij Yij) + sum Cij*Xij
Subject to:
Sum over i Xij >= D_j for each customer j //Demand satisfaction
Sum over j Xij <= S_i for each supplier i //Supply limitation
// if you use a supplier for a customer, Yij has to become 1.
Yij >= Xij for each i and each j
Yij binary, Xij >=0
您可以在任何标准OR教科书中找到有关固定电荷整数编程问题的更多信息。查看引入整数编程的章节。
希望能帮助你前进。
答案 1 :(得分:1)
要点是您想要最小化或最大化的目标函数。如果您只想减少转移次数,则必须尽量减少非零转移的数量:假设您有从$ i $到$ j $的转移的$ x_ {ij} $变量,那么您应该最小化$ \ sum y_ {ij} $其中$ y_ {ij} $是一个二进制变量,当$ x_ {ij} = 0 $时,它取值$ 0 $,否则为$ 1 $。
我猜你可以将整体模型表示为单元格之间的最小成本流,可能还有其他约束条件和非平凡的目标函数。
(顺便说一下,如果您需要帮助,也可以在我们的谷歌论坛上与mosek联系......)