[英]Resource allocation algorithm for an airlock on a moon base
我正在嘗試查找類似這樣的資源分配問題的算法或問題名稱。
月球基地有一個氣閘,一次只能有一個人可以使用該氣閘進入或退出,並且需要20秒才能通過。 氣閘過渡不能提前中止或逆轉。 宇航員在基地外時(例如10分鍾)空氣有限。 他們在月球上的工作是操作與月底距離不同的許多鑽頭,並使其在100%的人工運行時間下運行。
我希望回答這樣的問題:在沒有宇航員的情況下,可以支持多少個演習場地? 您如何確定氣閘的時間表(誰進入/退出和以什么順序)?
有2個組件:
-首先計算出在每個鑽探地點進行100%正常工作時間所需的宇航員人數。
-找出可以使用一個氣閘操作的鑽頭數量
Per Drill:
MaxWorkTime[i] = AirTime - 2*TravelTime[i]
ActualWorkTime[i] < MaxWorkTime[i]
WorkersPerDrill[i] = AirTime/ActualWorkTime[i]
for each drill
try to schedule airlock time
當工作時間利用率接近100%時,可以減少工作時間以更優化地安排工人在氣閘上工作(我認為)。
下面是一個簡單的圖表,試圖進一步闡明問題。 氣閘時間由宇航員使用,並且由條形指示。 我想將使用率提高到最大,同時又不讓太多宇航員外出。 示出了一次鑽探的宇航員工作周期。 宇航員利用氣閘時間離開,走到工作地點,進行工作,回到基地,然后用氣閘進入。
|---time-->
Airlock: |--x---| |--x---| |--x---| |--x---|
Astronaut1 |-lock-|--to--|---------drill1--------|-from-|-lock-|
Astronaut2 |-lock-|--to--|-------drill1--------|-from-|-lock-|
^
drill1 always manned
AirTime = 10min
WalkSpeed = 1 m/s
drill[0] = 180m // 6min to/from travel
drill[1] = 150m // 5min
drill[2] = 120m // 4min
drill[3] = 240m // 8min
TravelTime[0] = 6min
...
MaxWorkTime[0] = AirTime - TravelTime[0] = 4min
...
// WorkersPerDrill = AirTime/MaxWorkTime
WorkersPerDrill[0] >= 2.5 // These numbers are over 1 airtime (10m)
WorkersPerDrill[1] >= 2
WorkersPerDrill[2] >= 1.67
WorkersPerDrill[3] >= 5
TotalWorkersPerAirtime = sum(WorkersPerDrill) = 11.17
AirlockTime = 20s
AirlockPerWorker = 40s
TotalAirlockUsage = TotalWorkersPerAirtime*AirlockPerWorker = 7.4 min of airlock time
74% usage of airlock if no one uses it at the same time
這是問題的第一部分。 一旦出現沖突,鑽具[1]工人和鑽具[3]工人同時返回,就有機會無所事事。 那就是我要解決的問題。 感謝您提出這個冗長的問題!
這甚至不是編程問題。 更像是數學。
要使單個鑽一直保持運行狀態,您至少需要每10分鍾花費20 + 20秒。 那是一個人回去,一個人出來。
您可以更頻繁地更改班次,但這總是效率較低。
因此,每10分鍾需要40s的上門時間進行一次演練。
然后,您可以級聯每個鑽的換檔,以使它們不重疊,如下圖所示:
<- 10 mins ->
drill-1 x--------------x--------------x--------------x
drill-2 -x--------------x--------------x--------------
drill-3 --x--------------x--------------x-------------
...
drill-15 --------------x--------------x--------------x-
圖中每個字符的寬度為40秒, x
表示班次變化。
解決方案是10分鍾除以40秒= 15次練習
編輯:讓我只猜測細節,並回答問題,以防每個站點往返基地的步行時間不同。
在那種情況下,我只是將圖中的x
標記分成兩個半部>
, <
,分別對應一個人出去和進去。 另外, w
代表每個鑽頭的固定往返時間。
同樣清楚的是,我們正在談論哪種鑽頭,請始終先選擇最接近的鑽頭。
該圖變為(不按比例):
drill-1 >w<-------------->w<-------------->w<-------------->w<
drill-2 ->ww<------------->ww<------------->ww<------------->w
drill-3 -->ww<------------->ww<------------->ww<------------->
drill-3 --->www<------------>www<------------>www<------------
...
約束條件是沒有>
或<
標記可以重疊。
但是,您只需要在10分鍾的時間片中考慮分配即可。 由於該圖將始終具有10分鍾的重復周期。
為什么? 因為如果任何鑽探圖的重復周期超過10分鍾,則某些宇航員將死亡。 而且,如果其中任何一個演練的重復周期少於10分鍾,您可以讓宇航員去觀光,以便將周期延長至10。也就是說,如果您沒有更好的分配方法。
此時,您可能會寫出蠻力嘗試在有限的時間內分配這些標記。
EDIT2:我認為在推理中可能會有一個缺陷,為什么只限制10分鍾就足夠了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.