高級目標
我有5的持續時間可以時間點0和10 此外之間啓動一個任務,我在間隔[2斷裂,4),和[6,7]在地平線[0,10)。如何使蟒循環邏輯更快
每當任務在特定時間點開始時,它應該檢查休息時間並延長持續時間,以便完成其實際持續時間。例如,如果任務在時間點1開始,理想情況下應該在時間點6完成,但由於在2,3和6中斷,應該延長至9完成任務。這意味着,持續時間= 5 + 3 = 8。
以下是任務在每個時間點考慮休息 [8,8,-1,-1,6,6,-1,5,5 ,5] 我使用-1來禁止這個作爲中斷時間點的起點。 上面的例子是爲了您對我想要建立和編碼的邏輯的理解。
具體問題
我可以通過定義一個函數來解決這個問題,如下所示。對於上述小數據,它運行良好。但如果我的視野更長,說86400(兩分鐘內),我的休息次數更高(例如每天4小時2次休息),那麼我的循環會花費更多時間。
Invalid_Timings2 = [
(0, 8640, 10080),
(0, 18720, 20160),
(0, 28800, 30240),
...
(44, 59040, 60480),
(44, 69120, 70560),
(44, 79200, 80640)
]
def Duration_Pre_Compute_Task_Split(Invalid_Timings2):
Duration1 = []
original_task_duration = 1380 # My task duration is 1380 minutes
for h in xrange(0, 86400): # task can start anywhere between 0 to 86400 minutes
dur = original_task_duration
k=0
for t in Invalid_Timings2: # break timings given at the end [(0,480,600), (0,960, 1200) etc..]
# current time point h should be outside break range
# also new duration calculated should not fall into next break range similar to the case explained with small data.
# If it falls, this break time should be added to the calculated duration
if t[1] - dur <= h <= t[1]+ dur and h not in range(t[1], t[2]) and h < t[2]:
k = 1
dur += t[2] - t[1]
if k != 0: #if k=1 means h is not in break range, task cannot start during break range
Duration1.append((h,dur)) # for each time point, final calculated duration is appended.
return Duration1
我的問題是關於性能。如果我的視野更長,並且中斷的數量正在逐漸增加,那麼這個計算時間會呈指數增長。
如何改進此功能以減少計算時間?
這個問題太籠統了,更像是一個需要完成的作業問題。您可以通過添加您嘗試的方法來改進它。此外,您應該關注您所面對的問題的具體部分。 – Gijs
嗨,它不是一個家庭作業問題。這是調度應用程序的一小部分。我盡我所能改善它。此前,它過去需要一個小時,我通過減少不必要的步驟將其減少到15分鐘。我只是想知道專家意見是否可以改進。讓我知道我可以添加什麼,以便您可以自己看到問題 – ASK
嘗試使這更具體。例如,您顯示的函數具有持續時間1380,但您的文本只顯示5.該函數循環到86400,但這不在任何地方解釋。也可以嘗試添加一些評論功能,以幫助我們理解你在嘗試什麼。根據您的建議更新 – Dan