如何鼓励优化者选择交易最少的解决方案(即最小化基数)

时间:2014-04-24 16:10:22

标签: matlab mathematical-optimization linear-programming constraint-programming mosek

我有一个线性模型,试图以最佳方式在“单元格”之间移动“单位”。每次转账费用为2美元加上转账单位金额的1%。

让我们说目标细胞需要100个单位,并且可以从10个源细胞中的任何一个接收它。如何鼓励优化器从其中一个源单元单次传输100个单元(总成本2 + 1),而不是从每个有效源单元传输10个单元(总成本20 + 1)?

如果重要的话,我已经使用mosek在matlab中实现了这一点。

(道歉,如果这个问题有点模糊,这都是自学成才,我不知道如何明确地用正确的术语来解答这个问题。如果有的话,很乐意将这个问题重新发布在更合适的SE上。 )

2 个答案:

答案 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联系......)