對於異星工廠的生產的數學建模與優化 (未完成)


輔助工具

科技樹/合成樹生成器: https://github.com/NoobSir-Michael/factorio-trees

設計目標

  1. 需要解決的問題: 通過某種算法得到升級出第一個科技的最優建造和生產策略.

  2. 先解決最簡單的科技: 自動化, 需要生產10個紅瓶

    1. 需要有研究中心進行研究, 石爐進行熔煉, 熱能采礦機進行開采

       

       

    2. 為了簡單起見假設無限能源 – 所有需要煤炭或者電力驅動的設備認為無限能源

  3. 將玩家抽象為一個無限能源的采礦機加上一個合成台, 其可並行, 初始情況下玩家的背包中擁有一個采礦機和一個石爐. 因為剩下的木頭不在使用的范圍內, 所以可對其進行忽略

  4. 代碼優化目標: 完成升級第一個科技自動化的時間.

    1. 自動化科技研究消耗: 每個紅瓶需要10s進行消耗, 每個紅瓶被使用后增加10%研究進度

    2. 可以將其抽象為以下概念: 自動化科技被分為10個自動化科技碎片, 消耗一個紅瓶花費10s合成一個碎片 當總碎片達到10個時完成合成.

  5. 將離散的合成步驟合並(因為只有一個合成台,可以直接相加):

    1. 紅瓶: 2 鐵板 + 1 銅板 + 5s

    2. 研究中心: 36 鐵板 + 15 銅板 + 22s

    3. 石爐: 5 石礦 + 0.5s

    4. 熱能采礦機: 5 石礦 + 9 鐵板 + 4s (這里忽略了直接使用石爐合成采礦機的選項)

    5. 科技碎片: 1 紅瓶 + 10s

       

       

基本模型結構

 

 

1. 對於基本模型結構的數學證明

題: 假設基礎原料的總量為 A . 生產工具的實時數量為 x. 開始時生產工具的數量為1. 每單位基礎原料可以花費 T1 時間生產出 K1 個生產工具 或者花費 T2/x 時間生產 K2 個產出. 從開始到所有基礎原料消耗完的時間中, 產出的平均生產效率的最大值是多少.

解: 工具: https://blog.csdn.net/shuangguo121/article/details/86611948

  1. 假設生產工具與生產產物可以並行進行. 很明顯產物生產效率的最大值符合貪心算法的要求, 即 使用所有的工具生產產物同時生產生產工具. 其平均效率為:

     

     

  2. 假設生產工具和生產產物不可同時進行.

    1. 證明先生產工具后生產產物的平均效率大於工具和產物交替生產: 因為在交替生產中生產相同數量的工具所需要的時間不變, 但是在兩組生產工具的任務中間的生產產物的任務的效率較低, 所以在相同時間交替生產的產量低於先生產工具后生產產物的產量. 所以效率較低

    2. 假設 0~Tc時間段生產工具, 余下的時間生產產物:

    3. 列出方程組

      x = Tc / T1 * K1 + 1

      y = (T - Tc) * K2 / T2 * x

      A = (x - 1) / K1 + y / K2

      其生產效率為: W = (T - Tc) * K2 / (T * T2) * (TcK1 / T1 + 1)

    4. 對生產效率函數進行帶入化簡:

       

       

       是關於Tc的函數

      求導:

       

       

      將其取0展開: 

       

       

      由於一般而言A的數值遠大於T1T2等常量所以

       

       

       小於零, 所以其生產效率函數有全局最大值.

      全局最大值 W 也是 

       

       

2. 對於數學模型的代碼模擬

為了簡化計算, 這里設置T1,K1,T2,K2均為1以研究平均生產效率與A之間的關系

  1. 可並行情況:

     

     

    1. 上面的橙色圖形是上一部分中數學計算得到的W的表達式, 由於將離散的生產處理為了連續的, 導致有一定量的誤差. 下面的綠色圖形是W = A^0.5*0.5 的曲線, 由此可以看出, Θ\left(\sqrt{A}\right)的結論是正確的

  2. 不可並行情況:

     

     

    1. 由此圖可以看出平均生產效率隨工具生產的占比先上升后下降, 並且在小於20的地方取到最大值

     

     

    1. 對於每個A獲取其最大的平均生產效率, 可以看出其是Θ\left(\sqrt{A}\right)並且和0.5*\left(\sqrt{A}\right)幾乎一致

     

    1. 這張圖表示的是在不同A的取值情況下生產多少比例的工具可以最大限度提升生產效率. 對y軸進行處理之后可以發現 1/(max_W_percentage)^2 正比於 A, 所以: maxWPercentage = Θ( 1/\sqrt A)

  3. 對於只有在先生產工具后生產產品的情況下平均生產率可以達到最大值這一判斷的補充驗證:

    1. 這里的模擬取A = 1000

    1. 上圖所示的藍色橫線是在先生產工具后生產產品時取工具消耗資源的比例為4%的平均生產效率

    2. random percentage是在生產工具的同時生產的產品的原材料占原始原材料的比例.

    3. 由此可見, 隨着在生產工具的同時生產的產品的數量增多, 總體的效率發生了下降

對於目標的建模

由於Factorial中進行熔煉, 采礦與合成都是需要占用工具的, 所以實際上是一個串行的生產過程

結合上面進行簡單模型的經驗, 將所有的對象的成本計算為工具工作時間的總和:

物品名稱 采礦時間 熔煉時間 合成時間 研究時間
研究中心 204 163.2 22 0
采礦機 56 28.8 4 0
石爐 20 0 0.5 0
科技碎片 12 9.6 5 10

 

 

紅色虛線表示促進作用

后續思路: 使用代碼建構對這整個生產過程的正向模擬, 由於機器的數量為整數, 對於不同機器數量進行遍歷, 尋找其一般規律然后繼續進行分析. 對於代碼建模而言, 對於 采礦, 熔煉, 研究, 合成 分別創建一個任務隊列, 認為每時刻只能處理一個任務, 但是由於生產工具數量的增加導致生產效率的增加. 將並行問題轉化為串行問題. 這兩種處理方式在時間較長的情況下應該是等效的. 我對此還沒有進行仔細地分析

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM