如何解决如何建立物业租赁服务的定价模型?
我正在建立一个物业租赁服务,我需要找到一种方法来计算正确价格/晚预订房间。
规格为:
所有者可以选择定价规则,例如:
« 最低价格为每晚 100 美元 » 或 « 8 月 1 周应花费 3000 美元 » 或 « 在复活节假期期间,价格应该是 200 美元/晚 »
客人会问:
« 从 5 月 1 日到 5 月 14 日的租金是多少? »
你知道任何可以帮助我的工具吗?或者关于我如何构建它的想法?
我更希望模型是连贯的(和连续的),所以我认为它可以是通过一些回归获得的函数 price(start_date,end_date)
,但我不知道如何实现它。
注意:我的应用程序在 Rails 中,但我很乐意使用 python、matlab、R
解决方法
这是一个可以在很多方面进行优化的粗略草案,但我会这样做:
# New model with the following attributes:
# room_id,begin_date,end_date,price
class Constraint < ApplicationRecord
belongs_to :room
validate :one_constraint_per_date
def one_constraint_per_date
# create a constraint to avoid having two constraint on the same date
end
end
class Room < ApplicationRecord
has_many :constraints
# Price engine
def price(date)
prev_constraint = prev_constraint(date)
next_constraint = next_constraint(date)
# if there are no constraint when can't determine the price
if prev_constraint.nil? && next_constraint.nil?
nil
# if there was no previous constraint,the will be the same as the next constraint
elsif prev_constraint.nil?
next_constraint.price
# if there are no future constraint,the will be the same as the previous constraint
elsif next_constraint.nil?
prev_constraint.price
# if date is included in a constraint,the price is the price of the constraint
elsif prev_constraint == next_constraint
next_constraint.price
# if date is between two constraints,we need to calculate the price
else
numerator = (prev_constraint.end_date..date).count
denominator = (prev_constraint.end_date..next_constraint.begin_date).count
ratio = numerator.fdiv(denominator)
prev_constraint.price * (1 - ratio) + next_constraint.price * ratio
end
end
# Find the last constraint beginning before the specified date
def prev_constraint(date)
constraints
.select { |c| c.begin_date.before?(date) }
.max { |c| c.begin_date }
end
# Find the first constraint ending after the specified date
def next_constraint(date)
constraints
.select { |c| c.end_date.after?(date) }
.min { |c| c.end_date }
end
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。