私は小さな家の設計プロジェクトに取り組んでいます。その最も重要な部分の1つは、ユーザーが彼の部屋をどのようにしたいかに関する情報を与えることができるセクションです(例えば、 10x10メートルの家、3x3のリビングルーム、3x3のキッチン、2つの4x5のベッドルーム、4x2のバスルーム)を備え、プログラムは要求された条件に従って家の地図を生成する。限られたスペースに部屋を配置するアルゴリズムに関するヘルプ
今のところ、マップを描画することを心配していません。重複しないように部屋を配置するだけです(はい、出力はかなり醜いことがあります)。私は既にいくつかの検索を行い、私が欲しいものがpacking problemと非常に似ていることを発見しました。この問題はかなりうまく処理されますが(NP完全な問題ですが)、algorithmsです。
しかし、私はさらに1つの制限がありました。たとえば、ユーザーは部屋間に「リンク」を指定できます。たとえば、部屋にはバスルームに「ドア」があり、リビングルームには直接キッチンなど(つまり、部屋を並べて配置する必要があります)、これが複雑になる場所です。
私はNP問題を設定したいと思うので、良い実装をするためのヒントを求めていますが、必ずしも最適な実装ではありません。私が持っているアイデアは、部屋間の関係を表すためにグラフを使用することですが、私はこの新しい制約に合わせて既存のパッキングアルゴリズムをどのように適応させることができないのかを知ることはできません。誰でも助けてくれますか?
このカテゴリの問題の一般名は*制約充足*のサブセットである*制約最適化です。これはあなたの検索を助けるかもしれません。私はあなたが本当にこの問題を解決したいのか疑問に思います。部屋の位置に入るほど多くのものがあります(たとえば、朝の太陽が当たる場所、ACダクトや配管などはどこで動くのですか?)。 – derobert
実際には、ユーザーが自分の部屋を置くことを可能にしながら、制約を思い出させる。 – bdonlan
ユーザーがあまりにも多くの制約を指定し、最適解を探していない場合は、「建設的」アルゴリズムを使用する必要があります。制約に従って部屋ごとにステップルームを構築し、動作しない場合は前の選択を変更してください。 –