固定サイズのタイルでタイリングする長方形

私は次の問題のための便利な解決策を見つけることに苦労しています:

Suppose we have a wall of a given size and 4 types of tiles of sizes 4 x 2, 2 x 2, 2 x 1, 1 x 1. There are certain rectangular regions inside the perimeter of the wall which can not be tiled (i.e. holes). There is also a special type of tile which has a variable dimension A x B with A < 1. This is used to pad the tiling to the margin of the rectangle, if needed.

次の制約を守る壁のタイリングを探します。

  1. 同じサイズのタイルは、同じ配置で上下に配置することはできません(つまり、下の行に表示されるタイルは、同じタイルの隣接するタイルの間に十字のように見えるようにずらす必要があります)サイズ)
  2. 最小数のタイルが使用されます
  3. 矩形の境界を超えるタイルはマージンにトリムされます。このようにして生成された不完全なタイルは、より小さなタイルで壊れます。これは、状況が発生する可能性がある場合はいつでも、四角形の余白または穴の余白の隣に常に置かなければならない特別なタイルの使用を伴う可能性があります。

これまで私が試したことは次のとおりです。

  1. これをドミノのタイリングを使って解決するためのアルゴリズムを調べましたが、ほとんどの場合、タイリングプロセスでタイルが交差する十字のようなギャップを生成できないように見えることはありません。また、私にとっては、タイルの種類が増えているので、問題は少し違って見えます。また、四角形を正確に塗りつぶす必要はありません(特殊なタイルを使用して塗りつぶされる余白の近くに小さなスペースが残っている可能性があります)
  2. 制約を破ることのないタイルが追加された状態のみが探索されるように、ステートノードのプルーニングを使用して分岐と結合の手法を使用してすべての可能なタイルを生成しようとしましたが、 >
  3. パッキングアルゴリズムについても調べましたが、私の知る限り、これは壁の敷地内に残る小さなスペースがある特定のタイルにつながる可能性があります。

私は何かを見落としてしまった可能性があります、または上記のテクニックを探究するのに十分な洞察力を持っていない可能性があります。

これらすべてが言われているのですが、皆さんはこれにアプローチして結果をもたらす方法についてのヒントや示唆を持っていますか?

これは、制約1と3を考慮した最適化ではないタイリングの例です。 a>

3

1 答え

あなたは最適なタイリングが必要ですか、あるいは「かなり良い」のために解決したいですか?最適なソリューションを見つけることは非常に難しいでしょう。直観的に、私は次のヒューリスティックを提案します:

1. Pretend there are no holes in the wall, tile with large tiles.

2. Remove all tiles which intersect with holes.

3. current_size = largest

4. For each empty space: tile as much as possible with current_size

5. current_size = the size just below current_size

6. return to 4
0
追加された
このアプローチの問題は、残りのサイズを埋める複雑さです。十字(+)が形成されないように最初の配置を見つける必要があります。これはもちろん、最初のタイリングを行った方法にもよります。このようなタイリングが、最初のタイリングを行った方法のために不可能な状況があるかもしれません。また、穴が互いに接近している場合もあります。これにより、穴が合わさって検索空間が拡大します。
追加された 著者 filipcampeanu,