Microcity Web介绍:该网站由大连海事大学物流系的孙卓教授自主研发, Microcity Web采用的语言是lua,由于其语法简单,数据结构强大,自由度高,另外,lua也是最快的语言脚本之一,对于优化问题的求解,速度也是十分关键的。Microcity Web可以实现相关运筹问题的求解,在物流交通领域具有较强的适用性,而且具有强大的仿真功能,是新手尝试撰写仿真代码不二选择。
四、车辆路径问题建模及求解
本文采用CW算法来求解选址问题之后的空箱运输CVRP问题。针对本题的研究背景与航运的实际情况,对CW算法做出了优化与改善,使之更加符合实际情况。如下进行说明:
(1)船舶载重空箱数量限制,为了保证船舶的航行安全与船舶稳性,船舶的重箱与空箱需要按合适的比例进行配载与装卸。故本文假设每周的空箱运输由2万TEU的集装箱船进行运输,一般空箱调运占总集装箱的20%-30%,因此设立船舶一次运输空箱运输的容量为4000TEU。
(2)基于研究背景下,空箱运输为每周的港口空箱需求,为了不延误港口作业而造成的连锁反应损失,需要对空箱运输时间进行限制,即不能无限制的添加需求点到路径中,必须满足一定的时间限制才能满足港口作业要求。故假设港口运输线路的航行总时长不多于2周。
(3)根据问题2所求解出的母港为新加坡港,考虑到港口装卸作业时间跟空箱需求量有关,该港口的空箱需求量高的情况下,它的装卸作业也会相应延长(1000TEU/天)。考虑到航行路程与航行时间的关系,航行海里越长,航行时间越长,由于模型中考虑了距离因素,故将5000km/天作为惩罚时间加入C-W模型。
基于以上分析,本文需要构建具有时间限制的C-W模型来解决空箱调运的CVRP问题。
(4)运行结果如下,共需4艘船,1为新加坡港:
关键代码框架:
建模求解 .lua |
Step1:设置目标函数 mip = math.newmip() m = {} for _, v in ipairs(C) do table.insert(m, v) end for _, v in ipairs(T) do table.insert(m, v) end total_number = #m mip:addrow(m, "min") Step2:设置约束条件 约束一:至少建设P个站点 w1 = {} for i = 1, total_number do ..... end mip:addrow(w1, ">=", P) 约束二:满足每个客户的最小需求量 for j = 1, #C_low_cost do local w2 = {} for i = 1, total_number do ...... end mip:addrow(w2, ">=", C_low_cost[j]) end 约束三:不超过每个站点的最大供应 for j = 1, #S_high_require do local w3 = {} for i = 1, total_number do if i <= #C then ...... else ...... …… mip:addrow(w3, ">=", 0) end Step3:输出选取站点、服务对象、供给数量 x={} for i=1 ,total_number do --变量0-1 x[i]='c'..i if i<=#C then mip:addrow(x[i], "bin") end end mip:solve() print("最小化目标函数值: ", mip['obj']) print("被选取的站点:") print("站点 " .. i .. " 对客户 " .. j .. " 的供应量: " .. supply .. " 单位") |