用python生成随机块

用python生成随机块,python,timetable,Python,Timetable,我需要创建一个时间表的自动生成器 我的想法是生成n个时间表,然后根据我的条件给它打分。得分高的时间表获胜 我有以下变量: 学科 教授 列表项 教室 每个专业都有一个代码和每周需要的小时数。 让我们调用小时数块 所以我有一个块数组 array = [5,4,3,2,1]; 这个数组表示在本例中我们有5个规程,以及它们每周需要的小时数。第一个专业需要5小时,第二个专业需要4小时,第三个专业需要3小时,第四个专业需要2小时,第五个专业需要1小时 我的时间表是从周一到周五的5x5二维数组,我需要将学科

我需要创建一个时间表的自动生成器

我的想法是生成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时间表数组代码的数组,但我被困在这一部分


对不起,我的英语不好。

我想可能是这样的

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

我想那会有用的。。。虽然如果您有任何不合适的物品,它会断裂…

是否有每天最长工作时间?一门学科的时间可以在几天内分配吗?如果是,增量是多少?是的,可以拆分。您所说的项目和限制是什么意思?一个项目包括一个专业,以及该专业的成本小时数。。。。limit是一个给定的行李或日程日最多可以包含5个的限制,例如…我有一个错误:“teste.py”:缩进错误:未缩进与任何外部缩进级别不匹配,第8ahh行返回行中有一个空间过多。。。现在修好它