8

次の問題がNP完全であるかどうか、または単純なブルートフォースの組み合わせチェックよりも実際に優れた/簡単な解決策があるかどうかを誰かに確認してもらいたいのです。

ソフトウェアにある種のリソース割り当ての問題があります。例を挙げて説明します。

日中は4人で仕事をする必要があるとしましょう。この数と、それが「デイシフト」であるという事実は、私たちのデータベースに記録されています。

ただし、これらのスポットを埋めるのに誰もが必要なわけではありません。法案に合わせるために満たす必要のある要件がいくつかあります。

それらの4つのうち、2つは看護師でなければならず、1つは医師でなければならないとしましょう。

医師の1人も特定のチームの一員として働く必要があります。

したがって、次の一連の情報があります。

デイシフト:4
   1人の医師
   1人の医師、チームAで働く必要がある
   1人の看護師

上記は問題ではありません。問題は、私たちが日勤で働く人々を選び始め、これまでに選んだ人々が実際に基準を満たすことができるかどうかを理解しようとするときに起こります。

たとえば、James、John、Ursula、Maryを選んで仕事をするとします。ここで、JamesとUrsulaは医師、JohnとMaryは看護師です。

UrsulaはチームAでも働いています。

さて、私たちが法案に適合させようとする順序によっては、さまざまな組み合わせを試し始めない限り、適切な人材がいるかどうかを推測してしまう可能性があります。

たとえば、リストを下に移動して最初にUrsulaを選択すると、彼女を「1人の医師」の基準に一致させることができます。次に、ジェームズに行きます。彼はチームAで働いていないため、「1人の医師、チームAで働く必要がある」に関する他の基準を彼で満たすことができないことに気付きました。他の2人は看護師であるため、その基準にも適合しません。

したがって、最初にジェームズをバックトラックして試してみると、彼も最初の基準に適合でき、次にウルスラはそのチームを必要とする基準に適合できます。

したがって、すべてを試すまでさまざまな組み合わせを試す必要があるため、問題が発生します。この場合、動作しているヘッドの総数が合計と同じであっても、まだ満たされていない基準がいくつかあります。必要なヘッドの数、または機能する組み合わせを見つけました。

これが唯一の解決策ですか、誰もがより良い解決策を考えることができますか?


編集:いくつかの説明。

この質問へのコメントは、この少数の人々と一緒に、力ずくで行くべきであると述べています、そして私は同意します、それはおそらく私たちができることであり、ある種の最適化がデータサイズが小さい場合は、データを選択し、初期オーバーヘッドが少ないさまざまなソートアルゴリズムを選択します。

ただし、問題は、これが名簿計画システムの一部であり、「当日シフトにはX人が必要」と「このY人のプールがある」の両方で、かなりの数の人が関与する可能性があることです。それはそれを行うでしょう」、そして大きな「私たちはこれらのY人と何らかの形で一致しなければならないそれらのX人のためのZ基準のこのリストを持っています」の可能性と同様に、そしてあなたは私たちが持っているという事実に追加しますリーダーが名簿を調整するのと同じ計算をリアルタイムで行うのに何日もかかり、その後、迅速な解決策の必要性が出てきました。

基本的に、リーダーには、日中シフト全体でまだ行方不明になっている人の数、さまざまな基準に適合している人の数、実際に何人の人がいるかを示すライブ合計情報が画面に表示されます。私たちが持っているものに加えて、ned。この表示は、リーダーが「ジェームズがウルスラの代わりにデイシフトを取り、ウルスラがナイトシフトを行う場合」で名簿を調整している間、セミライブを更新する必要があります。

しかし、これまでにこれに答えてくれた人々のおかげで、制約充足問題は私たちが進むべき道のように聞こえますが、ここではすべてのリンクとアルゴリズム名を確実に調べます。

これが私がStackOverflowが大好きな理由です:)

4

9 に答える 9

11

あなたが持っているのは、制約充足問題です。それらの NP との関係は興味深いものです。なぜなら、それらは通常 NP ですが、多くの場合 NP 完全ではないためです。つまり、多項式時間の解に扱いやすいからです。

ebo がコメントで指摘したように、あなたの状況は、Knuth のアルゴリズム Xを適用できる正確なカバー問題として定式化できるように聞こえます。このタックを取る場合は、それがどのように機能するかをお知らせください。

于 2009-06-05T16:10:47.720 に答える
3

制約充足問題があるようです。

あなたの場合、私は特に最初に制約伝播手法を調べます-そのようにして問題を扱いやすいサイズに減らすことができるかもしれません。

基準を満たす人がいない場合はどうなりますか?

于 2009-06-05T16:16:04.913 に答える
1

複数または多数の制約がある場合は、Drools Planner(オープンソース、Java)を参照してください。

ブルートフォース分枝限定法、および同様の手法には時間がかかります。最大のシフトを最初に埋めるなどの決定論的アルゴリズムは、非常に最適ではありません。メタヒューリスティックは、これに対処するための非常に優れた方法です。

DroolsPlannerの実際の看護師名簿の例を具体的に見てみましょう。「若い看護師は土曜日の夜に働きたくない」や「何人かの看護師は何日も続けて働きたくない」など、多くの制約を簡単に追加できます。

于 2010-12-26T14:03:57.887 に答える
1

あなたが説明しているのは、この論文で軽く説明されている「ルームメイトの問題」です。

我慢してください、私はより良いリンクを探しています。

編集

これは別のかなり密度の高いテーゼです。

于 2009-06-05T16:10:09.203 に答える
1

私の数学的知識はそれほど優れていないため、理論は他の人に任せますが、Cassowary/Cassowary.net や NSolver などのツールが、問題を制約充足問題として宣言的に表現し、制約を解決するのに役立つ場合があります。

このようなツールでは、制約伝播と組み合わせたシンプレックス法が頻繁に使用され、決定論的に解空間を縮小し、与えられたコスト関数から最適な解を見つけます。より大きな解空間 (指定した問題のサイズには当てはまらないようです) の場合、遺伝的アルゴリズムが使用されることがあります。

私の記憶が正しければ、NSolver のサンプル コードには、Dr. Chun が香港で取り組んだ実際の看護師の勤務表作成の問題を簡略化したものも含まれています。そして、彼が行った仕事についての論文があります。

于 2009-06-05T18:44:54.897 に答える
1

解決するのがはるかに簡単な分離可能な問題がいくつかあるように思えます。

-- チーム A から 1 人の医師を選択する -- 任意のチームから別の医師を選択する -- 2 人の看護師を選択する

したがって、3 つの独立した問題があります。

ただし、明確にするために、2 人の医師 (指定されたチームから 1 人) と 2 人の看護師が必要ですか、それとも、指定されたチームの医師 1 人、看護師 2 人、および医師または看護師のいずれかになることができるもう 1 人が必要ですか?

于 2009-06-05T18:47:28.917 に答える
1

あなたの問題が NP であるかどうかはわかりませんが、そのような匂いはしませんが、私があなただったら、利用できる人が少なくなるため、最も具体的なものを最初に満たそうとするように、ポジションの要件を注文することになります。これらのポジションを埋めて、後戻りする必要が少なくなるようにします。これを、純粋な Knuth-ness のアルゴリズムであるアルゴリズム X と組み合わせてはならない理由はありません。

于 2009-06-05T18:33:53.140 に答える
1

私に関しては、二部グラフのマッチング問題への削減を見つけようとする可能性が最も高いでしょう。また、問題がNPであることを証明することは、多項式の解を見つけることができないままでいるよりもはるかに複雑です。

于 2009-06-05T16:18:27.443 に答える
1

いくつかの質問:

  1. 目標は、制約を正確に満たすことですか、それともおおよそだけ(しかし可能な限り) 満たすことですか?
  2. 1 人が複数のチームのメンバーになることはできますか?
  3. すべての可能な制約は何ですか? (たとえば、複数のチームのメンバーである医師が必要でしょうか?)

制約を正確に満たしたい場合は、厳密さによって制約を減らします。つまり、達成するのが最も難しいもの (たとえば、上記の例では医師とチーム A) を最初にチェックする必要があります。

おおよその制約を満たしたい場合は、別の話です...正確に一致させることができず、いくつかの可能性がある場合に、何を持っているかを決定するある種の重み付け/重要度関数を指定する必要があります。から選択します。

于 2009-06-08T07:09:46.073 に答える