import pandas as pd
Tv=pd.read_excel('DaPy_data.xlsx','Target',index_col=0); Tv #目标值
设备投资 | 单件成本 | 年销售量 | 销售单价 | |
---|---|---|---|---|
方案 | ||||
方案1 | 1500000 | 1700 | 8000 | 2900 |
方案2 | 2000000 | 1550 | 8000 | 2900 |
方案3 | 2500000 | 1400 | 8000 | 2900 |
Tv['年收益']=Tv.年销售量*(Tv.销售单价-Tv.单件成本)-Tv.设备投资;Tv
设备投资 | 单件成本 | 年销售量 | 销售单价 | 年收益 | |
---|---|---|---|---|---|
方案 | |||||
方案1 | 1500000 | 1700 | 8000 | 2900 | 8100000 |
方案2 | 2000000 | 1550 | 8000 | 2900 | 8800000 |
方案3 | 2500000 | 1400 | 8000 | 2900 | 9500000 |
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'];
#plt.rcParams['figure.dpi']=90 #分辨率
Tv['年收益'].plot(kind='bar');
Tv['年收益'].idxmax()
'方案3'
Ev=[min(Tv.设备投资), min(Tv.单件成本), max(Tv.年销售量), max(Tv.销售单价),
max(Tv.年收益)]; Ev #理想值
[1500000, 1400, 8000, 2900, 9500000]
Tv_Ev2=((Tv-Ev))**2 #差值的平方
Tv_Ev2
设备投资 | 单件成本 | 年销售量 | 销售单价 | 年收益 | |
---|---|---|---|---|---|
方案 | |||||
方案1 | 0 | 90000 | 0 | 0 | 1960000000000 |
方案2 | 250000000000 | 22500 | 0 | 0 | 490000000000 |
方案3 | 1000000000000 | 0 | 0 | 0 | 0 |
Dv=(Tv_Ev2).sum(1); Dv #差距
方案 方案1 1960000090000 方案2 740000022500 方案3 1000000000000 dtype: int64
Tv['差距']=Dv; Tv
设备投资 | 单件成本 | 年销售量 | 销售单价 | 年收益 | 差距 | |
---|---|---|---|---|---|---|
方案 | ||||||
方案1 | 1500000 | 1700 | 8000 | 2900 | 8100000 | 1960000090000 |
方案2 | 2000000 | 1550 | 8000 | 2900 | 8800000 | 740000022500 |
方案3 | 2500000 | 1400 | 8000 | 2900 | 9500000 | 1000000000000 |
Dv.plot(kind='bar');
Dv.idxmin()
'方案2'
pd.DataFrame({'单目标':Tv['年收益'],'单目标方案':Tv['年收益']==Tv['年收益'].max(),
'多目标':Tv['差距'],'多目标方案':Tv['差距']==Tv['差距'].min()})
单目标 | 单目标方案 | 多目标 | 多目标方案 | |
---|---|---|---|---|
方案 | ||||
方案1 | 8100000 | False | 1960000090000 | False |
方案2 | 8800000 | False | 740000022500 | True |
方案3 | 9500000 | True | 1000000000000 | False |
PLm=pd.DataFrame(); #构建损益矩阵 ProfitLoss matrix
PLm['畅销']= 12000*(Tv.销售单价-Tv.单件成本)-Tv.设备投资;
PLm['一般']= 8000*(Tv.销售单价-Tv.单件成本)-Tv.设备投资;
PLm['滞销']= 1500*(Tv.销售单价-Tv.单件成本)-Tv.设备投资;
PLm
畅销 | 一般 | 滞销 | |
---|---|---|---|
方案 | |||
方案1 | 12900000 | 8100000 | 300000 |
方案2 | 14200000 | 8800000 | 25000 |
方案3 | 15500000 | 9500000 | -250000 |
lg=PLm.max(axis=1);lg #每列最大者
方案 方案1 12900000 方案2 14200000 方案3 15500000 dtype: int64
BQD=PLm.copy();PLm
BQD['乐观']=lg; BQD
畅销 | 一般 | 滞销 | 乐观 | |
---|---|---|---|---|
方案 | ||||
方案1 | 12900000 | 8100000 | 300000 | 12900000 |
方案2 | 14200000 | 8800000 | 25000 | 14200000 |
方案3 | 15500000 | 9500000 | -250000 | 15500000 |
lg.plot(kind='bar');
lg.idxmax()
'方案3'
bg=PLm.min(1); bg
方案 方案1 300000 方案2 25000 方案3 -250000 dtype: int64
BQD['悲观']=bg; BQD
畅销 | 一般 | 滞销 | 乐观 | 悲观 | |
---|---|---|---|---|---|
方案 | |||||
方案1 | 12900000 | 8100000 | 300000 | 12900000 | 300000 |
方案2 | 14200000 | 8800000 | 25000 | 14200000 | 25000 |
方案3 | 15500000 | 9500000 | -250000 | 15500000 | -250000 |
plt.rcParams['axes.unicode_minus']=False; #正常显示图中负号
bg.plot(kind='bar');
bg.idxmax()
'方案1'
9.2.2.3 折中原则
a=0.35
zz= a*lg + (1-a)*bg; zz
方案 方案1 4710000.0 方案2 4986250.0 方案3 5262500.0 dtype: float64
BQD['折中']=zz; BQD
畅销 | 一般 | 滞销 | 乐观 | 悲观 | 折中 | |
---|---|---|---|---|---|---|
方案 | ||||||
方案1 | 12900000 | 8100000 | 300000 | 12900000 | 300000 | 4710000.0 |
方案2 | 14200000 | 8800000 | 25000 | 14200000 | 25000 | 4986250.0 |
方案3 | 15500000 | 9500000 | -250000 | 15500000 | -250000 | 5262500.0 |
zz.plot(kind='bar');
zz.idxmax()
'方案3'
Rm=PLm.max()-PLm;Rm #构建后悔矩阵 Regret matrix
畅销 | 一般 | 滞销 | |
---|---|---|---|
方案 | |||
方案1 | 2600000 | 1400000 | 0 |
方案2 | 1300000 | 700000 | 275000 |
方案3 | 0 | 0 | 550000 |
hh=Rm.max(1);hh
方案 方案1 2600000 方案2 1300000 方案3 550000 dtype: int64
BQD['后悔']=hh; BQD
畅销 | 一般 | 滞销 | 乐观 | 悲观 | 折中 | 后悔 | |
---|---|---|---|---|---|---|---|
方案 | |||||||
方案1 | 12900000 | 8100000 | 300000 | 12900000 | 300000 | 4710000.0 | 2600000 |
方案2 | 14200000 | 8800000 | 25000 | 14200000 | 25000 | 4986250.0 | 1300000 |
方案3 | 15500000 | 9500000 | -250000 | 15500000 | -250000 | 5262500.0 | 550000 |
hh.plot(kind='bar');
hh.idxmin()
'方案3'
pd.DataFrame({'乐观':lg,'乐观方案':lg==lg.max(),'悲观':bg,'悲观方案':bg==bg.max(),
'折中':zz,'折中方案':zz==zz.max(),'后悔':hh,'后悔方案':hh==hh.min()})
乐观 | 乐观方案 | 悲观 | 悲观方案 | 折中 | 折中方案 | 后悔 | 后悔方案 | |
---|---|---|---|---|---|---|---|---|
方案 | ||||||||
方案1 | 12900000 | False | 300000 | True | 4710000.0 | False | 2600000 | False |
方案2 | 14200000 | False | 25000 | False | 4986250.0 | False | 1300000 | False |
方案3 | 15500000 | True | -250000 | False | 5262500.0 | True | 550000 | True |
probE=[0.1,0.65,0.25]; #初始概率
qw=(probE*PLm).sum(1); qw
方案 方案1 6630000.0 方案2 7146250.0 方案3 7662500.0 dtype: float64
qw.plot(kind='bar');
qw.idxmax()
'方案3'
Rm
畅销 | 一般 | 滞销 | |
---|---|---|---|
方案 | |||
方案1 | 2600000 | 1400000 | 0 |
方案2 | 1300000 | 700000 | 275000 |
方案3 | 0 | 0 | 550000 |
probE=[0.1,0.65,0.25];
hhqw=(probE*Rm).sum(1); hhqw
方案 方案1 1170000.0 方案2 653750.0 方案3 137500.0 dtype: float64
hhqw.plot(kind='bar');
hhqw.idxmin()
'方案3'
pd.DataFrame({'期望值':qw,'期望方案':qw==qw.max(),
'后悔期望值':qw,'后悔期望方案':hhqw==hhqw.min()})
期望值 | 期望方案 | 后悔期望值 | 后悔期望方案 | |
---|---|---|---|---|
方案 | ||||
方案1 | 6630000.0 | False | 6630000.0 | False |
方案2 | 7146250.0 | False | 7146250.0 | False |
方案3 | 7662500.0 | True | 7662500.0 | True |