簡體   English   中英

將塊擬合成不對稱形狀(Python、G.netic 算法)

[英]Fitting blocks into an asymmetrical shape (Python, Genetic Algorithm)

您好,我正在嘗試將樂高積木拼成不對稱的形狀。

形狀看起來像這樣: 在此處輸入圖像描述

我可以在所有樂高積木(不同重量)之間進行選擇,它們是:

  • 8x2 (0.35)
  • 8x1 (0.29)
  • 6x2 (0.28)
  • 6x1 (0.25)
  • 等等

所有的磚塊都可以垂直和水平對齊

將形狀帶入代碼中,我使用如下數組:

  0 0 1 1 1 1 1 1 0 0 0 0
  1 1 1 1 1 1 1 1 0 0 0 0
  0 0 0 0 1 1 1 1 0 0 0 0
  0 0 0 0 1 1 1 1 0 0 0 0
  1 1 1 1 1 1 1 1 1 1 1 1
  1 1 1 1 1 1 1 1 1 1 1 1
  0 0 0 0 1 1 1 1 1 1 1 1
  0 0 0 0 1 1 1 1 0 0 0 0

我現在需要以最低的成本將塊放入這種形狀 我考慮為此使用 g.netic 算法,但實際上不確定如何開始

誰能幫我解決這個問題?

首先,您可以通過維護預先計算的坐標數組並將其用作 DNA 的一部分,將可能的坐標僅限制在內部方塊中。 如果內部面積僅為總面積的一半,則其性能至少應提高 100%。

然后DNA可以由以下基因組成:

  • 樂高積木類型或索引
  • 樂高旋轉
  • lego 的翻譯 --> 映射到 interior-squares 數組

那么適應度可以通過以下方式計算:

  • 對於所有放置的樂高積木:
    • penalty += a1 * (each square of lego that overlaps with other lego)^2
    • penalty += a2 * (each square of lego that overflows the shape)^2
    • 罰款 += a3 * (cost of a lego)^2
  • 最后:
    • fitness = (a4 * the percentage of interior filled) - penalty

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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