簡體   English   中英

月底氣閘的資源分配算法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM