使用Python和Z3库求解本量利分析
此代码几乎可以完全解决本量利分析的各项参数,也可以适用于其他各种类似的分析题,只要满足z3的求解条件即可。python版本为python3,使用的z3库为4.8.6,下载和安装请直接查看网上的教程。
Z3用于多项式的非线性分析,用于本量利分析不要太好,废话不多说,直接铺代码
以下为本量利分析的基本公式及变量值,如有需求可自行添加。基本不需要再做改动,但是要理解每个变量的含义
from z3 import *
s = Solver()
Price = Real('Price')
Quant = Real('Quant') #All sale mount
Base = Real('Varied')
Profit = Real ('Profit') #before tax
FC = Real('FC') #Fixed Cost
CM = Real('CM') #Contribution Margin
TCM = Real("TCM") #Total Contribution
CMR = Real("CMR") #Contribution Rate
BR = Real('BR') #Base Rate
EQ = Real('EQ') #Edge Quant
ET = Real('ET') #Edge Total
ST = Real('ST') #Sale Total
SER = Real('SER') #Safe Edge Rate
#完整公式
s.add(Profit == (Price-Base)*Quant - FC,CM == Price -Base,TCM == CM*Quant,CMR == CM/Price,BR == Base/Price,EQ == FC/CM,ET == EQ * Price,ST == Quant * Price,SER == EQ/Quant)
接下来是根据不同的题目的不同的环境输入条件值,condition通常是给定条件,而targetCondition用于决策分析,比如部分变量的改动额,以及目标额(通常是利润)。稍微解释下push和pop,pop会将与这个pop匹配的push之间的add操作全部删除。用于在主公式不变的情况下,分析个参数的影响值。
condition ={Price:10,Base:5,FC:150000,Quant:80000*0.5}
targetConditon = {Profit:80000}
#条件分析
s.push()
for key in condition:
s.add(key == condition[key])
#s.add(Price == 350,Base == 28+188+52,FC == 45000+2000*12+2*1500*12+3*1000*12,Quant == 3600)
if( sat == s.check()):
m = s.model()
print(m)
else:
print("No solve")
s.pop()
#决策分析
for key1 in condition:
print("########",key1," Start","##########################")
s.push()
for key2 in condition:
if(key2 == key1):
for keyTarget in targetConditon:
s.add(keyTarget == targetConditon[keyTarget])
else:
s.add(key2 == condition[key2])
if( sat == s.check()):
m = s.model()
print(m)
else:
print("No solve")
s.pop()
print("########",key1," End","##########################")
代码已经全部贴完,接下来看看效果,冰淇淋厂本量利分析题
各项参数如何计算不再赘述(实际意义不大),根据题目修改conditon和TargetCondition后,直接运行
condition ={Price:350,Base:268,FC:141000,Quant:3600}
targetConditon = {Profit:180000}
得到结果(结果没有排版,交给有需要的人),盈利值154200与答案一致,边界值等用分数表示请自行转换。
[FC = 141000, Varied = 268, ET = 24675000/41, ST = 1260000, Profit = 154200, SER = 235/492, EQ = 70500/41, BR = 134/175, CM = 82, Price = 350, Quant = 3600, TCM = 295200, CMR = 41/175]
决策分析结果
FC : 115200,Quant : 160500/41,Varied : 1565/6(大约是260),Price:2143/6(大约是357),表示任意一个参数达到以上的目标时,都可以达到指定的目标,盈利180000。比如固定成本降到115200,或者提价到357元/千只
以上,分析决策完毕。