生成随机块时间表python

2024-03-28 14:57:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要创建一个自动生成时间表。在

我的想法是生成“n”个时间表,然后根据我的条件给它打分。得分高的时刻表获胜。在

我有这些变量:

  • 纪律
  • 教授
  • 列表项
  • 教室

每个学科都有一个代码和每周所需的小时数。 我们把小时数称为“阻塞”。在

所以我有一组块。在

array = [5,4,3,2,1];

这个数组表示我们拥有的学科数量(在本例中是5个)以及他们每周需要的小时数。第一节课需要5小时,第二节4小时,第三节3小时,第四节2小时,第五节1小时。在

我的时间表是5x5二维数组(星期一到星期五),我需要将学科数组分配到5x5数组中。所以我需要它能产生的所有解决方案。在

示例:

array = [5,4,3,2,1];

我可以把第一个纪律(5个小时)安排在星期一,第二个(4个小时)在星期二,第三个和第四个星期三(3小时2小时),最后一个纪律(1小时)在星期二。像这样:

discipline = {A,B,C,D,E};
array = {5,4,3,2,1};

ABC
ABC
ABC
ABD
AED

这只是一个可能的解决方案,但我需要所有的组合,并保存在一个数组内的组合。在

我做了一个函数,将5x5时间表数组转换成我理解的代码,反之亦然。所以每次生成解决方案时,我都会将代码保存到一个数组中。在

基本上我想要一个充满5x5时间表数组代码的数组,但我被困在这一部分。在

对不起我的英语。在


Tags: 代码列表数组时间表解决方案条件arrayabc
1条回答
网友
1楼 · 发布于 2024-03-28 14:57:57

我想也许是这样吧

def greedy_bag(items,limit):
    weighted_items = sorted(items,key=lambda x:x["cost"],reverse = True)
    items_in_bag =  []
    for item in weighted_items:
         if item["cost"] < limit:
            items_in_bag.append(item)
            limit -= item["cost"]
    return items_in_bag
disiplines = "ABCDE"
costs = [5,4,3,2,1]
items = [{"item":d,"cost":c} for d,c in zip(disiplines,costs)]
schedule = []
while items:
    bagged_items = greedy_bag(items,5)
    if not bagged_items:
        break
    for item in bagged_items:
          items.remove(item)
    schedule.append(bagged_items)

print schedule

我想那会有用的。。。(尽管如果你有任何不适合的东西,它会破裂…)

相关问题 更多 >