如何通过仿真获得/确定该模型中的最佳组合(s,S)?

时间:2019-02-01 22:17:58

标签: model julia combinations simulation

如何通过仿真获得/确定此模型中的最佳组合(s,S)?

using Distributions

function simulateOneRun(m, s, S)
pd = Poisson(20)
h, c = 0.1, 2.0 # storage cost & sale price
p = 0.50 # probability of delivery
K, k = 40.0, 1.0 # fixed and variable order cost
Xj, Yj = S, 0.0 # stock in the morning and in the evening
profit = 0.0 # cumulated profit.
for  j in 1:m
    Yj = Xj - rand(pd) # subtract demand for the day.
    Yj < 0.0 && (Yj = 0.0) # lost demand.
    profit += c * (Xj - Yj) - h * Yj
    if Yj < s && rand()< p # we have a successful order.
        profit -= K + k * (S - Yj)
        Xj = S
    else
        Xj = Yj
    end
end
profit / m
end

for S in [190.0, 200.0, 210.0]
println(S,"\t", @time simulateOneRun(10_000_000, 100.0, S))
end

我不知道如何确定这个函数的优化缓存。

1 个答案:

答案 0 :(得分:1)

这个问题与仿真优化算法有关,与编程无关。关键的问题是什么是(s,S)对的领域,因为它会影响算法。也许你可以看看例如在handbook处选择适合您情况的方法。此外,由于问题是随机的,因此请注意,只有在正确选择的可能性下才能找到解决方案(假设(s, S)空间的基数很小,在连续空间中,基于PCS的推理不适用。)

为了减轻计算负担(代码中的m较低),您可能需要使用一些减少方差的方法(例如,参见here),在这种情况下,对于每个随机性使用者,您的代码应该为随机数提供一个独立且可复制的流。这是一个示例,您可以如何修改代码以获取代码:

using Random

function simulateOneRun(m, s, S, seed1=1234, seed2=4321)
    mt1 = MersenneTwister(seed1)
    mt2 = MersenneTwister(seed2)
    pd = Poisson(20)
    h, c = 0.1, 2.0 # storage cost & sale price
    p = 0.50 # probability of delivery
    K, k = 40.0, 1.0 # fixed and variable order cost
    Xj, Yj = S, 0.0 # stock in the morning and in the evening
    profit = 0.0 # cumulated profit.
    for  j in 1:m
        Yj = Xj - rand(mt1, pd) # subtract demand for the day.
        Yj < 0.0 && (Yj = 0.0) # lost demand.
        profit += c * (Xj - Yj) - h * Yj
        if Yj < s && rand(mt2) < p # we have a successful order.
            profit -= K + k * (S - Yj)
            Xj = S
        else
            Xj = Yj
        end
    end
    profit / m
end

您还可以考虑在类似demand = rand(pd, 10_000_000)success = rand(10_000_000) .< p的向量中为需求和订单成功分配随机流,并将它们传递给simulateOneRun。这应该加快步伐了一点,但收益可能不会很大。

这不是最终解决方案,因为您仍然需要修改代码以对稳态下的系统性能进行正确的评估(因为我想这是您的任务)。 This book是一个很好的参考。