这是我的方案,
我经营按摩院,提供各种按摩服务。说30分钟按摩,45分钟按摩,1小时按摩等。我有50个房间,100名员工和30件设备。当客户预约按摩预约时,预约需要1个房间,1个员工和1个设备到可用。
在给定的一天内为10位客人查找可用资源的好算法
资源:
房间 - 50
员工 - 100
设备 - 30
营业时间:上午9点至下午6点
员工时间:上午9点至下午6点
不是客人:10
服务
5位客人 - (1小时按摩)
3位客人 - (45分钟按摩)
2位客人 - (1小时按摩)。
他们大约在同一时间出现。假设当天没有其他任命
获得::
的最佳方法是什么排名前10的结果 - 满足所有条件的最快搜索获得前10名结果集。前十名由最早的可用时间定义。 9 - 11AM是最好的结果集。晚上9点到5点不太好。
详尽搜索(查找所有组合) - 所有组合 - 每种可能的组合
首次见面(仅返回第一场比赛) - 在满足其中一个条件后停止
感谢您的帮助。
由于 尼克
答案 0 :(得分:1)
首先,员工,房间和设备的数量似乎无关紧要。看起来你只关心哪一个是最低的数字。那是你的库存。所以在你的情况下,库存= 30。
接下来,听起来您可以在营业的第一个小时内同时为所有10个人提供服务。事实上,您可以同时为30个人服务。
因此,没有必要算法来解决这个问题,这是一个静态的解决方案。如果您采用@Mario The Spoon的建议,并根据相应的利润对不同的持续时间按摩进行加权,那么您可以在一次有超过30个客户的情况下开始优化。
答案 1 :(得分:1)
看起来您正在尝试解决有相当专业的软件应用程序的问题。如果你的问题足够小,你可以尝试使用一些循环和回溯来做一个强力方法,但是一旦问题变得太大,迭代所有可能性将花费太多时间。
如果问题开始变大,请寻找更专业的软件。需要注意的是“基于约束的优化”和“约束编程”。
E.g。 ECLIPSe工具是一个开源约束编程环境。您可以在http://eclipseclp.org/examples/index.html上找到一些示例。你可以找到一个很好的例子是SEND + MORE = MONEY问题。在这个问题中,您有以下等式:
S E N D
+ M O R E
-----------
= M O N E Y
用字母替换每个字母,以便总和正确。 这也说明虽然你可以解决这个暴力问题,但还有更智能的方法来解决这个问题(见http://eclipseclp.org/examples/sendmore.pl.txt)。
答案 2 :(得分:1)
只是想找到解决方案:
您可能希望尝试使用约束满足问题(CSP)算法来解决它。如果他们必须解决一般的时间表问题(例如大学的房间预订),这就是有些人所做的事情。
有一些技巧可以提高CSP性能,例如前向检查,构建DAG然后进行拓扑排序等等......
请告诉我,如果您需要有关CSP的更多信息:)