我目前正在尝试在C#中编写一个小脚本,该文件为不同位置的各个团队提供了一个调度首选项的CSV文件,其中包含固定的可能的班次,每个团队都会为每个位置提供一个首选项列表。当他们想要转变时,从大多数到最不喜欢。然后,该程序可以对所有可能的解决方案进行分类,以找到最适合每个人的理想时间表。我有一个启发式方法,根据解决方案与理想的距离(每个团队获得第一个偏好)来评估哪个解决方案更理想。
限制是:
例如,我当前的测试数据有
总共需要组织20个班次(10 * 2,每个队伍每个队伍一个班次),这20个轮班中每个班次共有5个可能的答案。
我计划通过从每个人都获得他们的第一选择的理想解决方案开始,然后从那里开始工作来暴力破解。但仅仅处理原始数据,超过95.3万亿可能的解决方案(5 ^ 20),这根本不可行。我非常有信心只使用第一,第二和第三个偏好来存在解决方案,但即使这样也需要超过3万亿个解决方案(3 ^ 20)进行排序。我一直试图找出解决这个问题的最佳方法,但是没有任何东西可以找到最好的结果。
我知道这个问题非常具体,但是我已经做了一些研究,并且找不到任何关于通过解决方案进行排序的方法,其中"偏好"被用作启发式方法来确定理想的解决方案,我相信它是一个从管理角度来看真正有益于许多教育和工作场所设置的概念。我希望这里有人可能知道从哪里开始,因为使用这种数据量并不是我所熟悉的。