import sympy as sp
Ps=56
P1=4
P2=18
P3=6,
c1=[2,2,2,1,8,2]
c2=[3,3,3,1,1,3]
c3=[3,3,3,2,2,3]
c4=[5,5,5,5,5,40]
c5=[6,6,30,30,10,10]
p1=[0.1,0.2,0.1,0.2,0.1,0.05]
p2=[0.1,0.2,0.1,0.2,0.2,0.05]
p3=[0.1,0.2,0.1,0.2,0.1,0.05]
N1=N2=Nt=1
#N3=sp.symbols('N3')
#M3=sp.symbols('M3')
#NYY_YNY情况
def NYY_YNY(p1,p2,p3,c1,c2,c3,c4,c5,P1=4,P2=18,P3=6,Ps=56,Nt=1):
N3=Nt*(1-p2)
M3=N3*(1-(1-p1)*(1-p3))
income=N3*(1-p1)*(1-p3)*Ps
cost=Nt*(c2+P1+P2)+N3*(P3+c3)
#拆分后的收支
pos=(Nt-Nt*max(p1,p2))-(N3-M3)
cost_d=M3*(c4+c1)
income_d=pos*Ps
#迭代部分
while pos>0:
cost_d=cost_d+pos*(P3+c3)+pos*p3*c4
pos=pos*p3
cost_total=cost_d+cost
income_total=income+income_d
probit=income_total-cost_total
return cost_total,income_total,probit
#NYN_YNN情况
def NYN_YNN(p1,p2,p3,c1,c2,c3,c4,c5,P1=4,P2=18,P3=6,Ps=56,Nt=1):
N3=Nt*(1-p2)
M3=N3*(1-(1-p1)*(1-p3))
income=N3*(1-p1)*(1-p3)*Ps
cost=Nt*(c2+P1+P2)+N3*(P3+c5)
#拆分后的收支
pos=(Nt-Nt*max(p1,p2))-(N3-M3)
cost_d=M3*(c4+c1)
income_d=pos*Ps
#迭代部分
while pos>0:
cost_d=cost_d+pos*P3+pos*p3*(c4+c5)
pos=pos*p3
cost_total=cost_d+cost
income_total=income+income_d
probit=income_total-cost_total
return cost_total,income_total,probit
#YNY_NYY情况
def YNY_NYY(p1,p2,p3,c1,c2,c3,c4,c5,P1=4,P2=18,P3=6,Ps=56,Nt=1):
N3=Nt*(1-p1)
M3=N3*(1-(1-p2)*(1-p3))
income=N3*(1-p2)*(1-p3)*Ps
cost=Nt*(c1+P1+P2)+N3*(P3+c3)
#拆分后的收支
pos=(Nt-Nt*max(p1,p2))-(N3-M3)
cost_d=M3*(c4+c2)
income_d=pos*Ps
#迭代部分
while pos>0:
cost_d=cost_d+pos*(P3+c3)+pos*p3*c4
pos=pos*p3
cost_total=cost_d+cost
income_total=income+income_d
probit=income_total-cost_total
return cost_total,income_total,probit
#NNN_YYN情况
def NNN_YYN(p1,p2,p3,c1,c2,c3,c4,c5,P1=4,P2=18,P3=6,Ps=56,Nt=1):
N3=Nt
M3=Nt*(1-(1-p1)*(1-p2)*(1-p3))
income=N3*(1-p1)*(1-p2)*(1-p3)*Ps
cost=Nt*(P3+P1+P2)+M3*c5
#拆分后的收支
pos=M3-Nt*max(p1,p2)
cost_d=M3*(c4+c2+c1)
income_d=pos*Ps
#迭代部分
while pos>0:
cost_d=cost_d+pos*P3+pos*p3*(c4+c5)
pos=pos*p3
cost_total=cost_d+cost
income_total=income+income_d
probit=income_total-cost_total
return cost_total,income_total,probit
#YYY_NNY情况
def YYY_NNY(p1,p2,p3,c1,c2,c3,c4,c5,P1=4,P2=18,P3=6,Ps=56,Nt=1):
N3=Nt*(1-max(p1,p2))
M3=Nt*p3
income=N3*(1-p3)*Ps
cost=Nt*(c1+P1+P2+c2)+N3*(P3+c3)
#拆分后的收支
pos=N3*p3
cost_d=pos*c4
income_d=pos*Ps
#迭代部分
while pos>0:
cost_d=cost_d+pos*(P3+c3)+pos*p3*c4
pos=pos*p3
cost_total=cost_d+cost
income_total=income+income_d
probit=income_total-cost_total
return cost_total,income_total,probit
#YNN_NYN情况
def YNN_NYN(p1,p2,p3,c1,c2,c3,c4,c5,P1=4,P2=18,P3=6,Ps=56,Nt=1):
N3=Nt*(1-p1)
M3=N3*(1-(1-p2)*(1-p3))
income=N3*(1-p2)*(1-p3)*Ps
cost=Nt*(c1+P1+P2)+N3*P3+M3*c5
#拆分后的收支
pos=(Nt-Nt*max(p1,p2))-(N3-M3)
cost_d=M3*(c4+c2)
income_d=pos*Ps
#迭代部分
while pos>0:
cost_d=cost_d+pos*P3+pos*p3*(c4+c5)
pos=pos*p3
cost_total=cost_d+cost
income_total=income+income_d
probit=income_total-cost_total
return cost_total,income_total,probit
#YYN_NNN情况
def YYN_NNN(p1,p2,p3,c1,c2,c3,c4,c5,P1=4,P2=18,P3=6,Ps=56,Nt=1):
N3=Nt*(1-max(p1,p2))
M3=Nt*p3
income=N3*(1-p3)*Ps
cost=Nt*(c1+P1+P2+c2)+N3*(P3+c5)
#拆分后的收支
pos=N3*p3
cost_d=M3*c4
income_d=pos*Ps
#迭代部分
while pos>0:
cost_d=cost_d+pos*P3+pos*p3*(c4+c5)
pos=pos*p3
cost_total=cost_d+cost
income_total=income+income_d
probit=income_total-cost_total
return cost_total,income_total,probit
#NNY_YYY情况
def NNY_YYY(p1,p2,p3,c1,c2,c3,c4,c5,P1=4,P2=18,P3=6,Ps=56,Nt=1):
N3=Nt
M3=Nt*(1-(1-p1)*(1-p2)*(1-p3))
income=N3*(1-p1)*(1-p2)*(1-p3)*Ps
cost=Nt*(P1+P2+P3+c3)
#拆分后的收支
pos=(Nt-Nt*max(p1,p2))-(N3-M3)
cost_d=M3*(c4+c1+c2)
income_d=pos*Ps
#迭代部分
while pos>0:
cost_d=cost_d+pos*(P3+c3)+pos*p3*c4
pos=pos*p3
cost_total=cost_d+cost
income_total=income+income_d
probit=income_total-cost_total
return cost_total,income_total,probit
#NNN情况
def NNN(p1,p2,p3,c1,c2,c3,c4,c5,P1=4,P2=18,P3=6,Ps=56,Nt=1):
N3=Nt
M3=Nt*(1-(1-p1)*(1-p2)*(1-p3))
income=N3*(1-p1)*(1-p2)*(1-p3)*Ps
cost=Nt*(P3+P1+P2)+M3*c5
probit=income-cost
return cost,income,probit
#循环求解
f=[NYY_YNY,NYN_YNN,YNY_NYY,YNN_NYN,YYN_NNN,NNY_YYY,YYY_NNY,NNN_YYN,NNN]
for i in range(6):
max_cost=0
max_income=0
max_probit=0
for j in range(9):
cost_total,income_total,probit=f[j](p1[i],p2[i],p3[i],c1[i],c2[i],c3[i],c4[i],c5[i])
if max_probit<probit:
max_cost=cost_total
max_income=income_total
max_probit=probit
fy=f[j]
else:
continue
print('第{:}个情况的最优方法为{:},期望成本为{:<20},期望利润为{:}'.format(i,str(fy),max_cost,max_probit))
实现代码表高亮
最新发布