我有以下几点OF可以最大限度地降低供应链的成本:
mdl.minimize(mdl.sum((cs+ch+cf+cv*d[j])*q[j] for j in arcs) + mdl.sum(α*(eh+et*d[j])*q[j] for j in arcs) + mdl.sum(β*(gh+gt*d[j])*q[j] for j in arcs) + mdl.sum(X[f]*cjf for f in comb))
其中cs, ch, cf, cv, eh, et, gh, gt, cjf, α and β是一系列常量参数。
d[j]是在或元组列表中组合的起点i和终点之间的距离。jarcs
q[j]i是 中起点和终点之间j的流量变量arcs。
X[f]是一个二元变量,用于在目的地打开设施j,容量为 ,和f的可能组合在中列出。jfcomb
第一个constraint 1确保q[i,j]来自原产地的流量i不超过其材料的最大dQ可用性i。D[(i, j)]是一个二进制参数,如果起点和终点1之间的距离小于或等于阈值,则 的值为。(这个参数帮助我们限制传输距离。)ijD[(i, j)]0
for i in I: mdl.add_constraint(mdl.sum(q[(i, j)]*D[(i, j)] for j in J) <= Qi[i])
第二个constraint 2确保流向q[i,j]目的地的流量j等于目的地开放设施的j容量与容量f。
for j in J: mdl.add_constraint(mdl.sum(q[(i, j)]for i in I) == mdl.sum(X[(j,f)] for f in F))
但是,我们需要另一个constraint 3来确保f在目的地开放的设施的容量总和j必须尽可能接近容量的总需求E。假设有 100 兆瓦的能源需求E = 100,那么我们希望降低OF供应成本,同时确保满足需求E。否则,最小化成本将为 0。这个约束可以表述为:
mdl.add_constraint(mdl.sum(X[j,f]for j in J for f in F) == E)
不幸的是,这个解决方案永远不可行。如果我们替换==它<=是可行的,但它的成本最低,而且容量远不及最大。我们不需要这是一个严格的限制,但我们确实希望通过在具有不同容量E的目的地开设多个设施来尽可能接近。(例如,我们可以有一个 20 兆瓦、一个 5 兆瓦、两个 30 兆瓦和另一个 15 兆瓦的目的地,通过开放 5 个目的地达到 100 兆瓦)jf
一种方法是强制模型打开N多个位置j,但是,我们有一组 128 个位置。要从一系列场景中找到最小成本和最大容量,N=1意味着N=128我们需要运行这个模型 128 次。
除了上述约束之外,我们还有 3 个额外的约束:
- 我们只能选择目的地
j来建造设施,并且只能以一种能力开放f。 - 要打开的目的地之和
j大于 0。 - 始发地和目的地
q之间没有负流ij
有没有办法:
constraint 3减少绑定,但仍然尝试在保持成本最低的同时达到目标E?- 重新
OF制定以将最小成本与最大容量相结合?
重要的是,我们不想运行模型 128 次。我们要建模选择目的地j以开设设施并f相应地选择容量,以最小化总供应成本并最大化装机容量。在我们的案例中,也不太可能只开设一个目的地j来满足所有需求E。取而代之的是,我们将有多个容量j较小的相加方法。fE