用lua语言+Microcity Web解决空集装箱母港选址与配送问题(三)

本文介绍了大连海事大学孙卓教授的MicrocityWeb平台,它使用Lua语言,用于解决物流交通领域的运筹问题,特别是优化空箱运输CVRP问题。通过CW算法改进,文章详细探讨了包括船舶载重限制、时间限制在内的约束条件,并展示了关键的建模和求解代码框架。
摘要由CSDN通过智能技术生成

       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 .. " 单位")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值