房屋租赁电费结算的研究
为了做好房客9月份到期终止合约的电费结算工作,我们找到了上海市电费的收费标准,由于是阶梯收费,会造成前一个房客过度用电导致后一家房客遭受经济损失的现象。
我们能找到最公平的应收款项的计算方式,是把原12个月的费用分段函数分界点等比例缩小到所居住时间长度(月)的地方。
为简化模型,我们没采用分时电表的设定值,而假设各梯度上的单价都只有一个。未考虑跃迁阶梯当月的特殊计算方式。
记函数f(n,x)表示居住n个月,用电量x度所应支付的费用(非电力公司要价的值)。可知该函数随n递减,随x递增。
现在有两个提案。
提案一。前房客按照账单缴纳电费f(12,x),其数额必定小于等于他应支付的费用f(9,x),产生的差额将用来支付新房客的账单费用与应支付费用间的损失,可通过新房客的电费账单作为支付依据,在后3个月由前房客支付。前房客的差额用完后,两家结清,剩余电费由后家独自承担。
但是这很麻烦,因为作为房客一般不会愿意在合约终止后还发生经济往来。于是有了提案二。
提案二。前房客在结束合同时一次性将差额付清。这种做法其实给了房东好处,因为如果新房客没有用完那部分差额来抵消电费的话(如极端情况,新房客没使用电量),那么剩余的前房客差额就自动归房东所有了。
为了观察在这个提案下,前房客终止合同时产生的电费差值,以及房东能获得好处的上下限,以非分时单价编写了程序如下(其中为了防止浮点数不精确问题,均转化为Decimal):
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from decimal import *
def fun (n,x):
r=Decimal(n)/Decimal(12)
if 0 <= x <= Decimal(3120)*r:
return Decimal('0.617')*x
elif Decimal(3120)*r <= x <= Decimal(4800)*r:
return Decimal('0.617')*Decimal(3120)*r+(x-Decimal(3120)*r)*Decimal('0.667')
elif Decimal(4800)*r <=x:
return Decimal('0.617')*Decimal(3120)*r+Decimal('0.667')*(Decimal(4800-3120)*r)+(x-Decimal(4800)*r)*Decimal('0.917')
return 0
def delta(x,y):
result= fun(3,Decimal(x))+fun(9,Decimal(y))-fun(12,Decimal(x+y))
'''if result<0 :
print (x,y)'''
return float(result)
def pay(x,y):
return float(fun(9,Decimal(x))-fun(12,Decimal(x)))
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.arange(0, 2000, 50)
y = np.arange(0, 5000, 50)
X, Y = np.meshgrid(x, y)
zs = np.array([delta(x,y) for x,y in zip(np.ravel(X), np.ravel(Y))])
Z = zs.reshape(X.shape)
ax.plot_surface(X, Y, Z)
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
plt.show()
若取前房客用电量x在0~5000,计算前房客产生的差额为f(9,x)-f(12,x),也就是程序中的pay()(为方便懒得换2D图了),图像结果为:
从图中可看出,是不鼓励疯狂用电的,但到了350元后会平缓。
而上述程序是取后房客用电量x为0~2000,前房客用电量y为0~5000,在这样的范围考察房东能从中获的收益:
现在实际情况是前房客已经用了3000多电量了,因此在房东立场上,只有寄希望于前房东突破4000大关,且后房客少用电,才能获较多的利,与之前的假设相符。而此图极端情况下房东获利最大值仅不到350元,其成立条件也不现实。
因此我认为这个模型还是相对公平的。
母亲提醒我说可以按分时算法的峰谷用量2:1来计算一个近似的单价,可能会更公平。事实上如果只是计算前房客的差额的话,只要知道每个月的的峰谷用电量,以这个等比例缩小阶梯点的策略也能套用。
我们能找到最公平的应收款项的计算方式,是把原12个月的费用分段函数分界点等比例缩小到所居住时间长度(月)的地方。
为简化模型,我们没采用分时电表的设定值,而假设各梯度上的单价都只有一个。未考虑跃迁阶梯当月的特殊计算方式。
记函数f(n,x)表示居住n个月,用电量x度所应支付的费用(非电力公司要价的值)。可知该函数随n递减,随x递增。
现在有两个提案。
提案一。前房客按照账单缴纳电费f(12,x),其数额必定小于等于他应支付的费用f(9,x),产生的差额将用来支付新房客的账单费用与应支付费用间的损失,可通过新房客的电费账单作为支付依据,在后3个月由前房客支付。前房客的差额用完后,两家结清,剩余电费由后家独自承担。
但是这很麻烦,因为作为房客一般不会愿意在合约终止后还发生经济往来。于是有了提案二。
提案二。前房客在结束合同时一次性将差额付清。这种做法其实给了房东好处,因为如果新房客没有用完那部分差额来抵消电费的话(如极端情况,新房客没使用电量),那么剩余的前房客差额就自动归房东所有了。
为了观察在这个提案下,前房客终止合同时产生的电费差值,以及房东能获得好处的上下限,以非分时单价编写了程序如下(其中为了防止浮点数不精确问题,均转化为Decimal):
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from decimal import *
def fun (n,x):
r=Decimal(n)/Decimal(12)
if 0 <= x <= Decimal(3120)*r:
return Decimal('0.617')*x
elif Decimal(3120)*r <= x <= Decimal(4800)*r:
return Decimal('0.617')*Decimal(3120)*r+(x-Decimal(3120)*r)*Decimal('0.667')
elif Decimal(4800)*r <=x:
return Decimal('0.617')*Decimal(3120)*r+Decimal('0.667')*(Decimal(4800-3120)*r)+(x-Decimal(4800)*r)*Decimal('0.917')
return 0
def delta(x,y):
result= fun(3,Decimal(x))+fun(9,Decimal(y))-fun(12,Decimal(x+y))
'''if result<0 :
print (x,y)'''
return float(result)
def pay(x,y):
return float(fun(9,Decimal(x))-fun(12,Decimal(x)))
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.arange(0, 2000, 50)
y = np.arange(0, 5000, 50)
X, Y = np.meshgrid(x, y)
zs = np.array([delta(x,y) for x,y in zip(np.ravel(X), np.ravel(Y))])
Z = zs.reshape(X.shape)
ax.plot_surface(X, Y, Z)
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
plt.show()
若取前房客用电量x在0~5000,计算前房客产生的差额为f(9,x)-f(12,x),也就是程序中的pay()(为方便懒得换2D图了),图像结果为:
![]() |
从图中可看出,是不鼓励疯狂用电的,但到了350元后会平缓。
而上述程序是取后房客用电量x为0~2000,前房客用电量y为0~5000,在这样的范围考察房东能从中获的收益:
![]() |
现在实际情况是前房客已经用了3000多电量了,因此在房东立场上,只有寄希望于前房东突破4000大关,且后房客少用电,才能获较多的利,与之前的假设相符。而此图极端情况下房东获利最大值仅不到350元,其成立条件也不现实。
因此我认为这个模型还是相对公平的。
母亲提醒我说可以按分时算法的峰谷用量2:1来计算一个近似的单价,可能会更公平。事实上如果只是计算前房客的差额的话,只要知道每个月的的峰谷用电量,以这个等比例缩小阶梯点的策略也能套用。