Model 如何通过模拟获得/确定该模型中的最佳组合?

Model 如何通过模拟获得/确定该模型中的最佳组合?,model,julia,combinations,simulation,Model,Julia,Combinations,Simulation,如何通过模拟获得/确定该模型中的最佳组合 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

如何通过模拟获得/确定该模型中的最佳组合

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
使用分布
功能模拟单元(m、s、s)
pd=泊松(20)
h、 c=0.1,2.0#存储成本和销售价格
p=0.50#交货概率
K、 K=40.0,1.0#固定和可变订单成本
Xj,Yj=S,0.0#早上和晚上的股票
利润=0.0#累计利润。
对于1:m中的j
Yj=Xj-兰特(pd)#减去当天的需求。
Yj<0.0&(Yj=0.0)#需求损失。
利润+=c*(Xj-Yj)-h*Yj
如果Yj

我不知道如何确定此函数的最佳缓存。

此问题与模拟优化算法相关,而不是直接与编程相关。关键问题是
(s,s)
对的域是什么,因为它会影响算法。也许你可以看看,例如,选择一种适合你情况的方法。此外,由于问题是随机的,请注意,只有在某些正确选择的概率下才能找到解决方案(假设
(s,s)
空间的基数很小,在连续空间中,基于PCS的推理不适用)

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

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
使用随机
函数模拟单元(m,s,s,seed1=1234,seed2=4321)
mt1=MersenneTwister(种子1)
mt2=MersenneTwister(种子2)
pd=泊松(20)
h、 c=0.1,2.0#存储成本和销售价格
p=0.50#交货概率
K、 K=40.0,1.0#固定和可变订单成本
Xj,Yj=S,0.0#早上和晚上的股票
利润=0.0#累计利润。
对于1:m中的j
Yj=Xj-兰特(mt1,pd)#减去当天的需求。
Yj<0.0&(Yj=0.0)#需求损失。
利润+=c*(Xj-Yj)-h*Yj
如果Yj

您也可以考虑在这样的向量中预先分配随机流以满足需求和订单成功,例如:代码>需求=RAND(PD,10000 000 0000)<代码> >成功= RAND(10y000 0000)。< P<代码>,并将它们传递给<代码> SimuleAutoRun<代码>。这应该会加快一点,但增益可能不会很大

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