Python仿真二级供应链测试安全库存模型

供应链与库存优化

供应链的定义因引用的来源而异,但它们都有相同的基本思想。 供应链被定义为“相互连接和相互依赖的组织网络,相互合作,共同控制、管理和改善从供应商到最终用户的材料和信息流。” 供应链的规模和复杂程度各不相同,有些只有几级,有些则有数级。 例如,一个供应链可能由原材料供应商、制造工厂和向消费者销售的零售商组成,如图 1 所示。但是,另一条供应链可能由多个供应商组成,每个供应商都有几个独立的制造流程。 组件、将这些组件组装成成品的制造商、多个配送中心以及全国各地向消费者销售的零售商,如图 2 所示

数学公式、分布和模型

安全库存公式

在给定所需的循环服务水平的情况下,应持有的安全库存水平的方程式在中给出。 假设供应商的补货提前期和客户需求均呈正态分布,并采用持续审查补货政策。 我们将在等式中使用以下符号

S S = Z ⋅ L σ D 2 + D 2 σ L 2 S S=Z \cdot \sqrt{L \sigma_{D}^{2}+D^{2} \sigma_{L}^{2}} SS=ZLσD2+D2σL2

正态分布

正态(或高斯)分布是一种连续概率分布,以其“钟形”形状而闻名,以分布均值 µ 为中心,标准差为 σ,标准正态分布是 µ = 0 且 σ = 1 的特殊情况。 随机变量 X 在实线上的概率密度函数为正态分布,均值为 µ 和标准差 σ

f ( x ) = 1 2 π σ e − 1 2 ( x − μ σ ) 2 f(x)=\frac{1}{\sqrt{2 \pi} \sigma} e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^{2}} f(x)=2π σ1e21(σxμ)2

格雷夫斯和威廉斯模型

d i ( t ) = ∑ ( i , j ) ∈ A ϕ i j d j ( t ) d_{i}(t)=\sum_{(i, j) \in A} \phi_{i j} d_{j}(t) di(t)=(i,j)Aϕijdj(t)

保证服务时间

模型结构

仿真模型

库存模拟示例

RANDOM_SEED = 42
PT_MEAN = 10.0         
PT_SIGMA = 2.0         
MTTF = 300.0          
BREAK_MEAN = 1 / MTTF  
REPAIR_TIME = 30.0     
JOB_DURATION = 30.0    
NUM_MACHINES = 10      
WEEKS = 4              
SIM_TIME = WEEKS * 7 * 24 * 60  


def time_per_part():
   
    return random.normalvariate(PT_MEAN, PT_SIGMA)


def time_to_failure():
    
    return random.expovariate(BREAK_MEAN)


class Machine(object):
    
    def __init__(self, env, name, repairman):
        self.env = env
        self.name = name
        self.parts_made = 0
        self.broken = False

        
        self.process = env.process(self.working(repairman))
        env.process(self.break_machine())

    def working(self, repairman):
       
        while True:
            
            done_in = time_per_part()
            while done_in:
                try:
                    
                    start = self.env.now
                    yield self.env.timeout(done_in)
                    done_in = 0  

                except Interrupt:
                    self.broken = True
                    done_in -= self.env.now - start  

                    
                    with repairman.request(priority=1) as req:
                        yield req
                        yield self.env.timeout(REPAIR_TIME)

                    self.broken = False

            # Part is done.
            self.parts_made += 1

    def break_machine(self):
        
        while True:
            yield self.env.timeout(time_to_failure())
            if not self.broken:
                
                self.process.interrupt()


def other_jobs(env, repairman):
   
    while True:
        
        done_in = JOB_DURATION
        while done_in:
          
            with repairman.request(priority=2) as req:
                yield req
                try:
                    start = env.now
                    yield env.timeout(done_in)
                    done_in = 0
                except Interrupt:
                    done_in -= env.now - start

模型代码

详情参阅 - 亚图跨际

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值