【发布时间】:2020-09-27 00:26:27
【问题描述】:
我有一个成本最小化问题。在这个问题中,我们有 3 个供应商。他们是 S1、S2 和 S3。 其中成本计算为价格 x 购买数量。
3 家供应商的价格值如下。
price=[10,15,20]
如果我有一个决策变量array[1..3] of var int:purchase,我将从哪个供应商那里获得优化问题的答案,我需要购买多少单位。
示例代码如下。
enum suppliers={s1,s2,s3};
int: len_sup=length(suppliers);
set of int:range_sup=1..len_sup;
array[range_sup] of int:price=[10,15,20];
int:demand=40;
array[range_sup] of int:moq=[5,0,5];
array[range_sup] of int:maxoq=[8,20,30];
array[range_sup] of var 0..100:purchase;
constraint sum(i in range_sup)(
purchase[i])=demand
;
constraint forall(i in range_sup)(
purchase[i]>=moq[i] \/ purchase[i]=0
);
constraint forall(i in range_sup)(
purchase[i] <= maxoq[i]
);
var int:cost;
constraint sum(i in range_sup)(
purchase[i]*price[i])=cost;
solve minimize cost;
现在我有一个嵌入价格折扣的新要求。这个价格折扣肯定会与我们购买的数量有所不同。
对于这个例子,假设我们知道,如果我们从任何供应商那里购买数量为 1 到 5,那么我们将获得 5% 的折扣(价格将从 5% 下降)。如果我们购买 6 到 10,我们将获得 10 % 价格折扣。如果我们购买超过 11 个,我们将获得 15% 价格折扣。
你如何将这个东西合并到模型中。这是通过分段线性函数使用的吗?(因为它看起来像非线性问题)。有人可以说明如何使用分段线性函数。
【问题讨论】:
标签: minizinc