2017-11-01 5 views
1

私はプログラミングでかなり新しいので、誰かがこれについて正しい方向で私を指し示すことができると思っています。要件を満たすアイテムの組み合わせを見つけるにはどうすればよいですか?

私は〜2400人のリストを持っています。それぞれの人には少なくとも23の条件のうちの1つがあります(条件がある場合は1、条件がない場合は0)。

E.G. Jonが条件1、5、および6を持つ場合、Jonの出力は{1,0,0,0,1,1,0,0 ...}になります。

次に、それぞれの状態の人の数がどれくらいのものかを示します。したがって、条件1の希望数が10人で条件2の希望数が5人の場合、条件1を持つ10人と条件2を持つ5人が必要です(両方がある場合、条件1と条件2に数えることができます) 。

また、正確に30人を選択し、1つの条件が少なくとも3人以上10人以下でなければならないという厳しい制限を受けて、できるだけ望ましい条件の数に近づけようとします。

これを行う方法はありますか?それではどうすればいいですか?私はこれを強制的に強制しましたが、多数の組み合わせが解決策を得ることができませんでした。

編集:ここでは5人と4つの条件のリストが小さい例である:条件の

Person 1: {1,0,0,1} Person 2: {0,1,1,1} Person 3: {0,0,0,1}Person 4: {1,0,0,0} Person 5: {1,0,0,1}

所望の数{2,1,1,2 }。私は3人を選んで、できるだけ望ましい数の条件に近づける必要があるという考えです。この例では、人物1,2、および4が選択される。私はこの考え方を23の条件を持つ2400人のリストに展開し、30人を選択しなければなりません(リストサイズと条件数に拡張できるはずですが)30人のメンバーがあるかどうかはわかりません正確に一致する結果になります。

それは物事を明確にするのに役立ちましたか?

+0

問題の仕様が少し曖昧に聞こえます。条件「i」を満たす「x」人を選択する必要があり、条件「i」、「j」、「k」を満たす30人を選択する必要がある、または可能な限りそれらの間の条件として多くの?最初のタイプは簡単です。 – norio

+0

プロセスのほんの一例で、必要なものを説明してください。たとえば、5人と3人の条件を使用できます。 – Alperen

+0

純粋な* python-3.x *コードでこれをやりたいのですか?例えば* z3py *や[pysmt](https://github.com/)のような市販のライブラリを使いたいですか? pysmt/pysmt)? –

答えて

0

この問題は、制約プログラミングによって簡単に解決できます。あなたはPythonを使っているので、Google's CP solverを使うことができます。 2400人の場合、30個の決定変数があり、各変数には2400の値のドメインがあります。あなたの目的は、あなたの解と理論上の最適解の差を最小にすることです(スコア0は、23の条件すべてが完全に満たされることを意味します)。制約プログラミングを使用することで、これは数十行のコードで実現できます。ソルバは、検索戦略やその他の詳細を処理します。

関連する問題