---
title : model
---
$min\sum\limits_{h\in\ lacks}\ \sum\limits_{i,j\in\ art\_arcs}{flow[h,i,j]\ \times \ art\_cost[h,i,j]}\ +\sum\limits_{h\in\ lacks}\ \sum\limits_{l,m\in\ inc\_arcs}{flow[h,l,m]\ \times \ inc\_cost[h,l,m]}$
```
#目標式
#人工運補總成本 #激勵機制運補總成本
obj = (quicksum(quicksum(flow[h,i,j]*art_cost[h,i,j] for i,j in art_arcs)for h in lacks) + quicksum(quicksum(flow[h,l,m]*inc_cost[h,l,m] for l,m in inc_arcs)for h in lacks))
#求最小值
m.setObjective(obj,GRB.MINIMIZE)
```
$s.t$
$Capacity\ straint$
$\sum\limits_{h\in\ lacks}flow\le capacity[o,p],\forall\ o,p\in arcs$
```
#流量限制
for o,p in arcs:
m.addConstr(quicksum(flow[h,o,p] for h in lacks) <= capacity[o,p],
'cap_%s_%s' % (o, p))
```
$Flow\ conservation\ constraints$
$\sum\limits_{(o,p)\in\ arcs(*,p)}flow[h,o,p]\ +\ inflow[h,p]\ =\ \sum\limits_{(p,k)\in\ arcs(p,*)}flow[h,p,k]\ ,\forall\left\{
\begin{array}{c}
h\in\ lacks \\
p\in\ nodes \\
\end{array}
\right.$
```
#流量守恆限制,供給量=運送量 運送量+需求量=0
for h in lacks:
for p in nodes:
m.addConstr(
quicksum(flow[h,o,p] for o,p in arcs.select('*',p)) +
inflow[h,p] ==
quicksum(flow[h,p,k] for p,k in arcs.select(p,'*')),
'node_%s_%s' % (h, p))
```
$0\ \le\ flow[h,o,p]\ \le\ capacity[o,p],is\ integer\ variable\ \forall\ o,p\in arcs$
\
\
$art\_cost\ Quantity\ discount$
\
$\begin{aligned}
f(flow[h,i,j]_{1to8}) &= 10flow[h,i,j]_{1}\ +\ 8flow[h,i,j]_{2}\ +\ 10flow[h,i,j]_{3}\ +\ 8flow[h,i,j]_{4}\ +\ 10flow[h,i,j]_{5}\ +\ 8flow[h,i,j]_{6}\ +\ 10flow[h,i,j]_{7}\ +\ 8flow[h,i,j]_{8}\\
\end{aligned}\ ,\forall\left\{
\begin{array}{c}
h\in\ lacks \\
i,j\in\ art\_arcs \\
\end{array}
\right.$
\
\
$\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0\ \le\ flow[h,i,j]_{1}\ \le\ 449y_{1}\ \land\ h_{1}=cut\ ,j_{1}\in Cut\_node_{2}$
$\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 450y_{2}\ \le\ flow[h,i,j]_{2}\ \le\ \infty y_{2}\ \land\ h_{2}=cut\ ,j_{2}\in Cut\_node_{2}$
$\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0\ \le\ flow[h,i,j]_{3}\ \le\ 899y_{3}\ \land\ h_{3}=cut\ ,j_{3}\in Cut\_node$
$\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 900y_{4}\ \le\ flow[h,i,j]_{4}\ \le\ \infty y_{4}\ \land\ h_{4}=cut\ ,j_{4}\in Cut\_node$
$\\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0\ \le\ flow[h,i,j]_{5}\ \le\ 899y_{5}\ \land\ h_{5}=add\ ,j_{5}\in Add\_node_{2}$
$\\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 900y_{6}\ \le\ flow[h,i,j]_{6}\ \le\ \infty y_{6}\ \land\ h_{6}=add\ ,j_{6}\in Add\_node_{2}$
$\\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0\ \le\ flow[h,i,j]_{7}\ \le\ 1799 y_{7}\ \land\ h_{7}=add\ ,j_{7}\in Add\_node$
$\\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 1800y_{8}\ \le\ flow[h,i,j]_{8}\ \le\ \infty y_{8}\ \land\ h_{8}=add\ ,j_{8}\in Add\_node$
$\\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ y_{1}\ +\ y_{2}\ +\ y_{3}\ +y_{4}\ +\ y_{5}\ +\ y_{6}\ +\ y_{7}\ +\ y_{8}\ =\ 1$
$\\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ y_{1}\ ,\ y_{2}\ ,\ y_{3}\ ,y_{4}\ ,\ y_{5}\ ,\ y_{6}\ ,\ y_{7}\ ,\ y_{8}\in \{0,1\}$
$\\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ flow[h,i,j]_{1}\ ,\ flow[h,i,j]_{2}\ ,\ flow[h,i,j]_{3}\ ,flow[h,i,j]_{4}\ ,\ flow[h,i,j]_{5}\ ,\ flow[h,i,j]_{6}\ ,\ flow[h,i,j]_{7}\ ,\ flow[h,i,j]_{8}\ \ge\ 0$
```
for h in lacks:
for i,j in art_arcs:
#增補的情況
if h == "add":
if j in Add_node:#如果j為前五大站點
#一天會來四輛增補的車
m.addGenConstrPWL(flow[h,i,j], art_cost[h,i,j], [0, 1799, 1800,10000], [10, 10, 8, 8])
else:#其他站點一天來兩輛增補的車
m.addGenConstrPWL(flow[h,i,j], art_cost[h,i,j], [0, 899, 900,10000], [10, 10, 8, 8])
#搬移的情況
else:
if j in Cut_node:#如果j為五大站點
#一天來兩輛搬移的車
m.addGenConstrPWL(flow[h,i,j], art_cost[h,i,j], [0, 899, 900 ,10000], [10, 10, 8, 8])
else:#其他站點一天來一輛搬移的車
m.addGenConstrPWL(flow[h,i,j], art_cost[h,i,j], [0, 449, 450,10000], [10, 10, 8, 8])
```
\
\
\
\