--- 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]) ``` \ \ \ \