仅供参考。不做任何保证。
目录
程序一:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
import random
import math
import time
from datetime import datetime
import PyQt5
from tkinter import *
import tkinter as tk
from tkinter import ttk
#用户输入相关数据,此例只是举例,可编写成动态输入
inventory=float(1000)#初始库存
lifetime=float(100)#保质期
minvalue=float(1)#单次购买最小量
maxvalue=float(10)#单次购买最大量
interval=int(1)#时间间隔
def generateArrival(inventory,lifetime,minvalue,maxvalue,interval=1):
mean_value=(minvalue+maxvalue)/2
begintime=1581264000
arrivaltime=[]
arrivaltime.append(begintime)
i=0
othertimelist=[]
lifetimelist=np.arange(0,lifetime,interval)
for each in lifetimelist:
print('each:',each)
if othertimelist != []:
print('2-1')
print('othertimelist:',othertimelist)
print('each+begintime:',each+begintime)
while othertimelist != [] and min(othertimelist)<(each+begintime+interval):
print('2-2')
arrivaltime.append(min(othertimelist))
second=datetime.fromtimestamp(min(othertimelist))
amount=round((random.uniform(minvalue,maxvalue)),2)
othertimelist.remove(min(othertimelist))
if amount > inventory:
print('In ',second,' ,the remaining is not enough, so the customer only bought ',inventory)
inventory=inventory-amount
break
if amount <= inventory:
print('In ',second,'No',i+1,'customer bought ',amount)
inventory=float(format((inventory-amount),'0.2f'))
lam=inventory/(mean_value*lifetime)
if arrivaltime[-1] > (each+interval+begintime):
othertimelist.append(arrivaltime[-1])
print('5-1')
print('In ',second,' ,there are still remaining. The number of them is ',inventory)
break
if inventory>0 and each>=max(lifetimelist):
print('They are overdue. The number is ',inventory)
i=i+1
if othertimelist != [] and min(othertimelist)>(each+begintime+interval):
print('仍需要下个时间段')
if inventory>0 and each>=max(lifetimelist):
print('They are overdue. The number is ',inventory)
print('1-1')
print('主程序')
lam=inventory/(mean_value*lifetime)
nextarrivalinterval=np.random.exponential(lam)
if (arrivaltime[-1]+nextarrivalinterval)>(each+interval+begintime):
print('未用时间')
othertimelist.append(arrivaltime[-1]+nextarrivalinterval)
else:
arrivaltime.append(arrivaltime[-1]+nextarrivalinterval)
lifetime=lifetime-nextarrivalinterval
second=datetime.fromtimestamp(arrivaltime[-1])
amount=round((random.uniform(minvalue,maxvalue)),2)
if amount > inventory:
print('In ',second,' ,the remaining is not enough, so the customer only bought ',inventory)
inventory=inventory-amount
break
if amount <= inventory:
print('5-2')
print('In ',second,'No',i+1,'customer bought ',amount)
inventory=float(format((inventory-amount),'0.2f'))
lam=inventory/(mean_value*lifetime)
if arrivaltime[-1] > (each+interval+begintime):
othertimelist.append(arrivaltime[-1])
print('5-1')
break
print('In ',second,' ,there are still remaining. The number of them is ',inventory)
i=i+1
if inventory>0 and each>=max(lifetimelist):
print('They are overdue. The number is ',inventory)
generateArrival(inventory,lifetime,minvalue,maxvalue,interval)
程序二:
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
import random
import math
import time
from datetime import datetime
import PyQt5
import tkinter
#给定初始库存inventory
def getInventory():
inventory=input('Please input the valuse of inventory: ', )
return float(inventory)
#给定保质期lifetime
def getLifetime():
unit=input('The unit of lifetime is day or hour: ', )
lifetimeunit=input('Please input the value of lifetime: ',)
#lifetime=lifetime*24*60*60
lifetimeunit=float(lifetimeunit)
if unit=='day':
lifetime=lifetimeunit*24*60*60
#print(lifetime)
return float(lifetimeunit*24*60*60)
elif unit=='hour':
lifetime=lifetimeunit*60*60
#print(lifetime)
return lifetimeunit*60*60
#给定min
def getMin():
min=input('Please input the valuse of min: ', )
return float(min)
#给定max
def getMax():
max=input('Please input the valuse of max: ', )
return float(max)
#给定interval
def getInterval():
interval=input('Please input the valuse of interval,and its unit is second: ', )
return float(interval)
#在每位顾客到达后,更新lam
def generateArrival(inventory,lifetime,minvalue,maxvalue,interval):
Mean=(minvalue+maxvalue)/2
arrivaltime=[]
arrivaltime.append(1581264000) #It's the beging time
lifetime_copy=int(lifetime)#The begining time
lifetime_end=arrivaltime[0]+lifetime#The ending time
arrivaltimecustomer=[]
lifetimelist=np.arange(1,lifetime+1,interval)
otherarrival=[]
i=0
#Situation 1-specail
if inventory>0 and lifetime<0:#The lifetime is none.
print("Sorry, they are overdue. The number is ",inventory)
#Situation 2-specail
if inventory <=0 and lifetime>0:
print("The inventory is zero.")
#Situation 3-specail
if inventory <=0 and lifetime <=0:
print("We have already sold all out.")
#Situation 4-normal situation
for each in lifetimelist:
if lifetime==interval:# The last second
print("Now it's the last time. Now there's remaining. They'are ",inventory)
break
if lifetime >=interval:# Not the last second
if inventory<=0:
break
print("For now the remaining is ",inventory)
lam=inventory/(Mean*lifetime)
nextarrivalinterval=np.random.exponential(lam)
if nextarrivalinterval<=each and inventory>=0:
#arrivaltime.append(arrivaltime[-1]+nextarrivalinterval)
while (arrivaltime[-1]+nextarrivalinterval)<=(each+arrivaltime[0]) or inventory <=0 or lifetime<=0:
print("Circle")
#if (arrivaltime[-1])<=lifetime_end:
#lifetime=lifetime-nextarrivalinterval
#arrivaltime.append(arrivaltime[-1]+nextarrivalinterval)
arrivaltime.append(arrivaltime[-1]+nextarrivalinterval)
second=datetime.fromtimestamp(arrivaltime[-1])
amount=round((random.uniform(minvalue,maxvalue)),2)
if amount>inventory and lifetime>=0:
print("In ",second,", the inventory is not enought to sell, so the customer just can buy ",amount)
lifetime=lifetime-nextarrivalinterval
inventory=float(format((inventory-amount),'0.2f'))
i=i+1
break
if amount<=inventory and lifetime>=0:
print('In ',second,'No',i+1,'customer bought ',amount)
lifetime=lifetime-nextarrivalinterval
inventory=float(format((inventory-amount),'0.2f'))
i=i+1
if lifetime<0:
print("Now it's the important and last time.")
break
lam=inventory/(Mean*lifetime)
nextarrivalinterval=np.random.exponential(lam)
if (arrivaltime[-1]+nextarrivalinterval)>(each+arrivaltime[0]):
otherarrival.append(arrivaltime[-1]+nextarrivalinterval)
break
else:
otherarrival.append(arrivaltime[-1]+nextarrivalinterval)
print(otherarrival)
#用户输入相关数据
inventory=getInventory()#初始库存
lifetime=getLifetime()#保质期
minvalue=getMin()#单次购买最小量
maxvalue=getMax()#单次购买最大量
interval=getInterval()#时间间隔
generateArrival(inventory,lifetime,minvalue,maxvalue,interval)
程序三:
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
import random
import math
import time
from datetime import datetime
import PyQt5
import tkinter
#给定初始库存inventory
def getInventory():
inventory=input('Please input the valuse of inventory: ', )
return float(inventory)
#给定保质期lifetime
def getLifetime():
unit=input('The unit of lifetime is day or hour: ', )
lifetimeunit=input('Please input the value of lifetime: ',)
#lifetime=lifetime*24*60*60
lifetimeunit=float(lifetimeunit)
if unit=='day':
lifetime=lifetimeunit*24*60*60
#print(lifetime)
return float(lifetimeunit*24*60*60)
elif unit=='hour':
lifetime=lifetimeunit*60*60
#print(lifetime)
return lifetimeunit*60*60
#给定min
def getMin():
min=input('Please input the valuse of min: ', )
return float(min)
#给定max
def getMax():
max=input('Please input the valuse of max: ', )
return float(max)
#给定interval
def getInterval():
interval=input('Please input the valuse of interval,and its unit is second: ', )
return float(interval)
#在每位顾客到达后,更新lam
def generateArrival(inventory,lifetime,minvalue,maxvalue,interval):
Mean=(minvalue+maxvalue)/2
arrivaltime=[]
arrivaltime.append(1581264000) #It's the beging time
lifetime_copy=int(arrivaltime[0])#The begining time
lifetime_end=arrivaltime[0]+lifetime#The ending time
arrivaltimecustomer=[]
lifetimelist=np.arange(1,lifetime+1,interval)
otherarrival=[]
i=0
#Situation 1-specail
if inventory>0 and lifetime<0:#The lifetime is none.
print("Sorry, they are overdue. The number is ",inventory)
#Situation 2-specail
if inventory <=0 and lifetime>0:
print("The inventory is zero.")
#Situation 3-specail
if inventory <=0 and lifetime <=0:
print("We have already sold all out.")
#Situation 4-normal situation
for each in lifetimelist:
if lifetime==interval:# The last second
print("Now it's the last time. Now there's remaining. They'are ",inventory)
break
if lifetime >=interval:# Not the last second
if inventory<=0:
break
print("For now the remaining is ",inventory)
lam=inventory/(Mean*each)
nextarrivalinterval=np.random.exponential(lam)
arrivaltime.append(arrivaltime[-1]+nextarrivalinterval)
while min(arrivaltime)<=(each+arrivaltime[0]) or inventory <=0 or lifetime<=0:
print("Circle")
second=datetime.fromtimestamp(min(arrivaltime[1:]))
amount=round((random.uniform(minvalue,maxvalue)),2)
if amount>inventory and lifetime>=0:
print("In ",second,", the inventory is not enought to sell, so the customer just can buy ",amount)
lifetime=lifetime-nextarrivalinterval
inventory=float(format((inventory-amount),'0.2f'))
i=i+1
break
if amount<=inventory and lifetime>=0:
print('In ',second,'No',i+1,'customer bought ',amount)
lifetime=lifetime-nextarrivalinterval
inventory=float(format((inventory-amount),'0.2f'))
arrivaltime.remove(min(arrivaltime[1:]))
i=i+1
if lifetime<0:
print("Now it's the important and last time.")
break
lam=inventory/(Mean*lifetime)
nextarrivalinterval=np.random.exponential(lam)
arrivaltime.append(arrivaltime[-1]+nextarrivalinterval)
else:
otherarrival.append(arrivaltime[-1]+nextarrivalinterval)
print(otherarrival)
#用户输入相关数据
inventory=getInventory()#初始库存
lifetime=getLifetime()#保质期
minvalue=getMin()#单次购买最小量
maxvalue=getMax()#单次购买最大量
interval=getInterval()#时间间隔
generateArrival(inventory,lifetime,minvalue,maxvalue,interval)