gpt4 book ai didi

python - 尝试创建一个规划算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:15:35 25 4
gpt4 key购买 nike

我有一个代表年份的列表,其中包含一年中每一天的子列表。

year = [] 
for i in range(0,52*7):
day = [i,0] #[day number, 0 = empty, 1 = something is planned]
year.append(day)

我还有一个由类(class)创建的可变事件列表。

class Activities:
def __init__(self,name,weeks,weekends):
self.name = name
self.weeks = weeks
self.weekends = weekends
def __repr__(self):
return repr((self.name,self.weeks,self.weekends))

def activityMaker(activityList):
a= []
for i in range(0, len(activityList)):
a.append(Activities(activityList[i][0], activityList[i][1], activityList[i][2]))
a = sorted(a, key=lambda Activities: Activities.weeks)
activityList = a
return activityList

举个例子;

    >>> activityList = [['Tennis', 3, 0], ['Baseball', 4, 0], ['Swimming', 2, 0]]
>>>activities= activityMaker(activityList)

返回“事件”,按 Activities.weeks 排序:

    >>>activities[0].name      
activities[0].week
activities[0].weekend
>>> 'Swimming' # activity name
2 #"i want to do this activity once every x weeks
0 # 0 = no preferance, 1 = not in weekends

现在这是我的困境。我希望创建一种算法,让一年中的事件尽可能有节奏。

我当前的方法无法正常工作。我现在正在做的事情如下。

for y in range(0,len(year), int(7*activities[0].weeks)):
year[y][1] = activities[i].name

现在为每个 y 计划了第一个事件。如果我有两个事件,每个人都想每周计划一次,我可以计划第一个在 0 号、7 号、14 号等,第二个在 3 号、10 号、17 号等。

如果 activities[0] 和 activities[1] 分别为 2 和 3,则说明此方法存在问题。如果我应用以前的方法,activities[0] 将计划在 0 号、14 号、28 号等,这它自己很好。在第 0 和第 14 之间,第 2 个事件最好放在第 7 个位置,这意味着下一次将是第 28 个。然而,28 日的第一项事件已经计划好了。这意味着两周内没有任何计划,然后一天突然有 2 项事件。第二项事件可能会推迟到 27 日或 29 日,但这仍然意味着现在计划在 0 日、7 日、14 日、28 日、29 日开展事件。也就是说,从 14 号到 28 号还有 14 天,然后从 28 号到 29 号只有 1 天。

我可以通过什么方式确保所有事件都按照事件之间的平均时间进行规划?

最佳答案

你的问题是,除非所有事件的周数都相同(所以它们都有相同的节奏,否则会有一些周有很多事件,而另一些周没有。

我的建议是:当您走过一年中的几周时,只需每周随机选择一项(或两项)事件。这样,每周都会有适量的事件计划。下面是一些示例代码:

import random
activities = ["Baseball", "Tennis", "Swimming", ... ]
skip_days = 3
year = {}
for y in range(0, 52*7, skip_days):
year[y] = random.choose(activities)

print year[0]
>>> "Swimming" (perhaps)

print year[15]
>>> "Baseball"

print year[17]
>>> None

如果您想要更多事件,请减小 skip_days。如果你想要更少,就让它更大。如果您想每周进行固定数量的事件,您可以做类似的事情

for y in range(0, 52*7, 7):
year[y] = random.choose(activities)
year[y+3] = random.choose(activities)

这将计划每周两天。

关于python - 尝试创建一个规划算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41531363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com