数の組み合わせでコンフィギュレータ
-
18-09-2019 - |
質問
していただいているプログラムは、通常の数を決めを可能にした組合せの製品をコンフィギュレータ.
のコンフィギュレーターですか?っているにもかかわらず可能なげることが可能となりモデル化し複数の"ラジオグループ"などのUIを制御)のnオプションを選択します。
のような制約が大きくとられているための規則は"まこと"と書かれた一つのオプションが選択された他のオプションは選択できません。
でいきたいと思い計算には数多くの異なる製品を設定でき、設定のオプション団体とはごく当たり前の原則です。
また、ナイーブアプローチこれを解決するの 包摂-排除の原則.しかし調査を実施しているのは、同じ照合アルゴリズムに基づくこのメソッドは実行O(2^n)になる。もちろん複数の最適化を行うもランタイムも簡単に構築最悪のシナリオ.
私がほとんど私が通っています。ご意見募集
更新
を実現いうルールに適用されました。
いくつかのグループとします。一つだけのオプション選択する必要があります。ができる一つ以上のオプションをしました。
ある種の制約場合はオプションは、一部のグループを選択すると、そのオプションBその他のグループできないを選択します。ができる任意の数の制約制限はありませんどのように多くの制約/規則が適用されるオプショングループのオプションまたはオプションそのものです。
なので例にすることはできない。
グループ1:
x1x2x3x4x5
グループ2:
y1y2y3
グループ3:
z1z2z3z4
制約:
x1 <->y2*
x1 <->z4
y2 <->z2
*
まx1オプションを選択したgroup1、そのオプションy2グループ2できないを選択します。
を包摂-排除という計算を組み合わせとして
組み合わせ=Cルールもないので -Cr[1]
-Cr[2]-Cr[3]+Cr[1,2]+Cr[1,3]+Cr[2,3]-Cr[1,2,3]
場所
Cルールもないので = 5 * 3 * 4
Cr[a,b,c]=数の組み合わせに違反するルールa、b、c.
の方法が必要と2^|規則-集計しています。
解決
Ok、どんな2^Nが低減でき、サンプルセットです。このためには、まだ計算"体制".されるように制約制約がの場合、すべてのオプションの左側を選択すると、そのオプションの右側に選択でき、その他の制約に基づき、左側のオプションが適用されます。
して計算するための設定の全ての可能な構成の制約から一定の制約がを必要としない"修正"として、既存の制約による入れ替えは左右の手である場合には、当社グループの右手により、グループを施したものをいう。この削減の一部を構成制約のものよりよいヒューリスティクスの可用されました。
また計算するための"最小セット"のオプションできる任意に選択されます。この最小セットの計算による除去の一覧から利用可能なオプション他のオプションされる左手の構成に与えます。
アルゴリズムの下にありませんの証明で計算CCsます。私はこの場合には、その数などを算出することができこれらの組み合わせとなります。
- 固定の制約のグループの左手には、同グループのものを右手で指す。
を構成する制約:
- ソート制約により左手には
順次、各制約:
- 倍に抑制すべての制約に従うもの同左旋回
x1 <-> y1
,x1 <-> y2
...x1 <-> yN
入Set(x1) <-> Set(y1 ... yN)
- 作成の折り返された制約れて折り返し制約の場合:
- x1は右手の折り返し制約
- x1は同じグループの任意の要素を左手に
- 追加の折り返された制約のすべての構成のセットの折り返し制約
- 倍に抑制すべての制約に従うもの同左旋回
計算の最低限の設定は、すべてのオプションの除去を行うものに登場する左手に固定。
今までの計算を組み合わせ数の式です。おうCCされるように与えます。その番号の組み合わせは:
C(Mininum Set) + CCC1 + ... + CCCn
場所:
- C(最小セットの番号の組み合わせ可能な最低限のセットです。
- CCCxの番号の組み合わせ可能で、最低限、当グループがオプションの左手のCCxこのオプション、それを取り除くオプションの右手のCCx.
この表現は純粋に添加剤である。ということは、その表現利回りに期待の結果、以下の二つの条件がtrueでなければなりません。
- なので同じ組み合わせです。
- すべての組み合わせが必要占めすることができる。
- ない無効に組み合わせ可を得ず。
最初の証明がありますのでご注意無二CCs同じる"という想いを込めました。まCCsが同じように左手が右手と、その意味があったほか、制約が許可申請をしなければなりませ、CCs、または無効な制約が適用されています。
そのため、二つのCCs同左手には、最低限のセットに含まれていない左手のCCによる定義、その他のCC区別することができる少なくとも一つのオプションである選択がないのです。そのため、CCsには同じ組み合わせです。
の証明となっていることに注目してくだセットCCsを含む、すべての有効な組み合わせのためのオプションに用いられる。
があることを仮定してよい一つの組み合わせが表示されませんのいずれかに最小限の設定や設定のCCsにインポートできます。この組み合わせが含まれていない左手のオプションをしなければならない組み合わせから最小限の設定による定義で設定します。そのため、オプションが含まれている必要があらかる"という想いを込めました。
以降、設定のCCsを含むすべての有効な組み合わせ用の左手で、そしてあCC同左。この組み合わせないため、オプションに含まれない組み合わせがあります。のみオプションに含まれないことをCCとされる左手のためのその他のCCsのものをその対象外とさせていただくよ。ものではないが、場合には、この組み合わせは存在しないのです。
第証明しましょう要最低限のセットです。最小限の設定が含まれていないオプションの左のグループすべての制約と左と右手にオプションは、制約の適用を最小限にセットです。
今を考えてみましょうションであるためである。CCの有効な組み合わせの左手にはオプションによる定義で設定します。任意のオプションとなること左手に書かれていなければなり右手、任意のオプションからは右手から除去しなければならな最低限のセットです。なオプションの最小セットが互換性のない自分たちの間ではまずあり得ないが不満の制約に組み合わせをすることができた。
ることを証明することにあります。
どんな姿を見せてくれるだろうかこれからのコメント:
G1: x1, x2, x3
G2: y1, y2
G3: z1, z2, z3
R1: x1 <-> y2
R2: x3 <-> y2
R3: y1 <-> z1
R4: y2 <-> z2
R5: y2 <-> z3
CC1: {x1} <-> {y2}
CC2: {x3} <-> {y2}
CC3: {y1} <-> {z1}
CC4: {x1, y1} <-> {y2, z1}
CC5: {x3, y1} <-> {y2, z1}
CC6: {y2} <-> {z2, z3}
そう考えをすすめます/すすめに構成団体の一覧:
R1&R2: {x1, x3} <-> {y2} -- not in the list because x1 and x3 belongs to the same
group
R1&R5: {x1, y2} <-> {y2} -- not in the list because the left hand of R2, y2
appears in the right hand of R1
それでは、どのオプションが可能で、各設定:
Minimum Set: (x2), (), (z1, z2, z3)
CC1: (x1), (), (z1, z2, z3) -- replace G1 with x1, remove y2 from G2
CC2: (x3), (), (z1, z2, z3) -- replace G1 with x3, remove y2 from G2
CC3: (x2), (y1), (z2, z3) -- replace G2 with y1, remove z1 from G3
CC4: (x1), (y1), (z2, z3) -- replace G1 with x1, G2 with y1, remove y2 and z1
CC5: (x3), (y1), (z2, z3) -- replace G1 with x3, G2 with y1, remove y2 and z1
CC6: (x2), (y2), (z1) -- replace G2 with y2, remove z2 and z3 from G3
それでは、追加:
C(Minimum Set) = 1 * 0 *3 = 0
CCC1 = 1 * 0 * 3 = 0
CCC2 = 1 * 0 * 3 = 0
CCC3 = 1 * 1 * 2 = 2
CCC4 = 1 * 1 * 2 = 2
CCC5 = 1 * 1 * 2 = 2
CCC6 = 1 * 1 * 1 = 1
C(Minimum Set) + CCC1 + CCC2 + CCC3 + CCC4 + CCC5 + CCC6
0 + 0 + 0 + 2 + 2 + 2 + 1 = 7
私は追加し、さらに思います。も6CCCs5規則は、以下の32条件が期待その他、これらのCCCs率を算出し2^N最悪時に、そのルールは、比較し、組み合わせですべてのCCCs作です。と思うだろうとしてバイナリー数、ビットがセットの場合のルールと組み合わせることによって、設定しない場合はいません。
ただし、互換性のない組み合わせに捨てすぐに、それぞれの新しいルールと組み合わせることによって、時には失われた組み合わせてみ無効となります。また、分別の前のルール-手続規則は同じグループが破棄されることがあるのでなくても試験不適合、正しいデータ構造です。
としてこの特定の例が示すように、平均できるよう2^N
代替アルゴリズムの考察
い2日(土)、3日(土)し上げます。そうで、私にとっては、この2土問題のようになったという意味の毎の制約を <->bのある条項"!a||!少なくしたいときに使いますすべてを制約とするだけ書いて"(!x1||!y2)&&(!x1||!z4)&&(!y2&&!z3)"など。ができるということです"解決"で ここからの換気をしてみてくださいがある場合はbooleanの配各オプションとしてtrue.あの線形アルゴリズムのためにこのよAspall,PlassとTarjan、発表スライド こちらの.
ものかどうかを知るのを抑制することで解決できない あなた.うたの 番号 のすべてのアプリケーションとなり、2-土問題です。
現在は、効率的なアルゴリズムのセキュリティ確保のための方法を満足する2-土問題です。例えば、 この論文 展示にはアルゴリズムで動作する1.2561n.が でもこの な、なのかを知っておく必要がありま 何 解が計算できることが、組み合わせが満足すること。
れば、お この論文 ているアルゴリズムの効率的な列挙すべてのソリューションでは専門が細分化されすぎていていいです。が合計数が指数関数となりますので列挙.以上2n, うものの指数関数.
ただし、次の場を列挙すべてのソリューション2-土問題、組み合わせのための各グループは1の数を乗じた無料オプションのオプションが表示されません任意の制約、それぞれのグループにおけるオプション選択によるソリューションとなります。
例えば、前回の設定のグループとはごく当たり前の原則です。2土問題などの相互排除する:
(!x1||!y2)&&(!x3||!y2)&&(!y1||!z1)&&(!y2||!z2)&&(!y2||!z3)&& (!x1||!x3)&&(!y1||!y2)&&(!z1||!z2)&&(!z1||!z3)&&(!z2||!z3)
最初の行は。第二のラインは、相互排他のすべてのオプションと同じグループとはどのように制約。
はこの2-土問題としては
x1 x3 y1 y2 z1 z2 z3 Combinations
true false true false false true false 1
true false true false false false true 1
true false true false false false false 0
true false false false true false false 0
true false false false false true false 0
true false false false false false true 0
true false false false false false false 0
false true true false false true false 1
false true true false false false true 1
false true true false false false false 0
false true false false true false false 0
false true false false false true false 0
false true false false false false true 0
false true false false false false false 0
false false true false false true false 1
false false true false false false true 1
false false true false false false false 0
false false false true true false false 1
false false false true false false false 0
false false false false true false false 0
false false false false false true false 0
false false false false false false true 0
false false false false false false false 0
最初の二つのソリューション、あるグループなしなし選択したオプションの組み合わせ数は1となっています。しないオプションを選択、グループG3い掛け1 0になります。のラインから始まる"false false"が選択したオプションのためのグループG1、無料のオプション:x2.その掛け算を1 1、0でない場合に選択したオプションのためのG2またはG3(この場合には数多くの無料のオプションは0)です。
現在の問いを実施することを決定し、各グループが主張することの2日(土)の問題として掲げたつの暗黙の制約:各グループが必要になり、唯一、オプションを選択します。これらを抑制できるとして書き込まれます:
x1 ||x2 ||x3 (グループ×オプションx1 ..x3)
(!x1 ||!x2)&&(!x1 ||!x3)&&(!x2 ||!x3)
その後の拘束された2日(土)、3日(土)の他の自明ではない。うにないの執行の最初の制約が、カウントが0になります。のcountingアルゴリズムはこのように:
- の制約下の組み合わせ、多数の制約以下のオプションの各グループによります。
- の制約を想の組み合わせを追加した結果、以下の数:
- のための各ソリューションを掛けると、数の制約以下のオプションの各グループなオプションの評価を"true"によります。
ですから、グループが少なくとも一つの制約以下のオプションの選択が暗黙的に、匿名のままです。各グループのすべてのオプションの一部である制約のない場合は、そのオプションを選択してカウントとグループが0、および、その番号の組み合わせで、そのソリューション0となりました。
この感じような不正な行為が発覚した場合の問題の有効>の2日(土)に与えます。その場合ることによって可能となった、その3-SAT問題を解決するだけで挙げてのソリューション2-土部分にアピールするとともに、その後破棄毎つを満たしていないのに3日(土)がこれに取り組んでくれました。アートワークが基本的な差が確認でき:
- すべての述語な解決の2-土問題の部分から更なる。
このような制限的制約の条項を解決できることでこの問題を列挙ソリューションの2日(土)明示的な制約に
もこされます。満足している改善の2n 液考えられる。
他のヒント
の場合 N
オプショングループ、それぞれ Xi
オプション0<=i<N
し
X0*X1*...*X(N-1)
に答えます。その他の言葉を掛けると、そのサイズはグループのオプション
の場合 n
パラメータ Ci
可能な値は各パラメータ m
制約は、上限の数configuartionsは下記の通りを無視しての制約).
N0 = C1 * C2 * ... * Cn
単一制約の形式 ci == x => cj != y
士には下記の番号を提供しています。
N
Dk = -------
Ci * Cj
この設定を差し引いたの許可configuartionsからの上限を無視し。
N = prod(Ci, i = 1...n) * (1 - sum(1 / (Cxj * Cyj), j = 1...m))
こちらの xj
や yj
の両方のパラメータの指標から j
番目に与えます。
例
Parameters n = 4
Parameter 1 C1 = 4 0 1 2 3
Parameter 2 C2 = 3 4 5 6
Parameter 3 C3 = 2 X Y
Parameter 4 C4 = 3 7 8 9
Constraints m = 2
Constraint 1 c2 == 4 => c3 != X
Constraint 2 c3 == X => c4 != 9
N0 = 4 * 3 * 2 * 3 = 72
D1 = 72 / (3 * 2) = 12
D2 = 72 / (2 * 3) = 12
N = 72 - (12 + 12) = 48
更新
と思うことはなcompletly正しいかを明らかにしていない依存関係の制約に
ありませんのショートカットはこちらを総合す。 などの悪いと思いますが。"の再考"にあります。
2^nの思いかどのくら除外規定していく。おけいこごとコンフィギュレータの場合は、設定のルール-オプションは常に変化に必要な動的に再計算.いう膨大な数の規則、そのような取り組みが認められ、厳密解--だけを考えった交差点"ということを数組み合わせが最低/最---".がその他のふるい方法をできる範囲の答えです。
が確保されている点にご留意ください。るだけの場合は除外す必要なし2^nとは異なりますので、ご了承くだ上限は、実際の数の計算がありますが、これらに準を満ので、実際にシナリオ.この場合はC[1,2]はゼロではC[1,2,...].このことを考え:各制約"塊"の制約としない場合このオプションに共通している。この真からの走行時間が定義することによりサイズの最大の塊"(ありがしていました。
再考:C[x,y]はゼロに 最 例。制約では重なりの制約を含む 異なる グループつまり、(x1<->y1)のみと重複(x1<->z1)又は(y1<->z2)やかなが(x1<->y2).同様に、一定の制約では重なり、新しいグループ:の 組み合わせ (x1<->y1)と(y1<->z2)のない相互作用(x3<->z2)(xグループでは、これまで固定x1).だける包摂/排除それぞれのルールを追加したり、組み合わせを追加した-手つかずのグループのミックス。なのですっO(2Gは、G数の団体とともにこのような異なる結合基のサイズグループ)より管理しや!
編集
このアルゴリズムが間違っています。をさせていただきました代替の答えに別のポストも2^Nの悪化の場合、もう方がよい結果を与えます。
この作品の例では、choosenでy2の一部除外設定のx1、最初の制約に基づくx1.だから、何を必要とされている。でも2^Nのが最適となるので大幅に改善する見込みです。
このアルゴリズムのルールは次の形式でなければなりませんセット(ox) <->set(oy).を合成し、その制約と左牛で作成、また他の組成と規則で構成 ば牛の一部ではない右側の構成は、原則なのでグループと同様に左側のグループ.
のための完全に独立した制約は2^Nですの削減Nのように:
- の一体化を抑制する共通左
- ない計算ルールの組み合わせると相互に排他こからです:
- ない組み合わせルールにオプションと同じグループ
- ない組み合わせルールの左側面の一つが表示され、右側にその他の
とは思わない固定このアルゴリズムは使い勝手は大きく変わります。これはメモリが重くなったり、のように同じめとして別の回答を、はるかに軽量バイクを作ることができる。
終編集
うことです。このためのアルゴリズム:
- 固定ルールを確保するために必要なことのためのルール
o1 <-> o2
,group(o1) < group(o2)
- 計算"構成"ルールにおける折り畳みによるすべてのルール
oX <-> o?
単一のルールoX <-> Set(o?)
- について計算するためのクリーンセットグループの取り付け取り外して左側のオプションのルール
- 計算代替のセットからのクリーンセット、各構成ルールを交換して、グループの左側のオプションのオプションそのものを差し引いたからに他のグループのオプションの右手ます。
- 各設定のグループ、計算数の組み合わせた数オプションの各グループセットになっています。
- 追加の結果からステップ5です。
を見てみましょうここでの仕事:
Group 1:
x1 x2 x3 x4 x5
Group 2:
y1 y2 y3
Group 3:
z1 z2 z3 z4
Constraints (already fixed):
x1 <-> y2 *
x1 <-> z4
y2 <-> z2
Composed rules:
x1 <-> (y2, z4)
y2 <-> (z2)
Clean set of groups:
x2x3x4x5, y1y3, z1z2z3z4
Alternate sets:
x1, y1y3, z1z2z3 (first composed rule)
x2x3x4x5, y2, z1z3z4 (second composed rule)
Totals:
4 * 2 * 4 = 32
1 * 2 * 3 = 6
4 * 1 * 3 = 12
Total: 50
現在、このアルゴリズムが間違っています。今、思いつかない明確になるので訂正またはその他のもとても良かったのではないかの問題が長すぎます。がリボルテッククイーンズブレイドの例:
c(no rules) = 60
c1 => 4
c2 => 3
c3 => 5
c12 => 1
c13 => 1
c23 => 0
c123 => 0
c(no rules) - c1 - c2 - c3 + c12 + c13 + c23 - c123 = 50
う場合のアルゴリズムは正しいようで、多項式.再度、現在のとは思えないから明確に充ていただきたいと思いますることなどを検討する必要がありbig-Oの操作のセット。
こちらはスカラの実装で:
case class GroupOption(id: Int, option: Int)
case class Group(id: Int, options: Set[Int])
case class Rule(op1: GroupOption, op2: GroupOption)
case class ComposedRule(op: GroupOption, set: Set[GroupOption])
object ComputeCombinations {
def fixRules(rules: Set[Rule]) = {
rules map (rule => if (rule.op1.id > rule.op2.id) Rule(rule.op2, rule.op1) else rule)
}
def ruledOptions(id: Int, rules: Set[Rule]): Set[Int] = (
rules
filter (rule => rule.op1.id == id)
map (rule => rule.op1.option)
)
def cleanseSet(groups: Set[Group], rules: Set[Rule]) = {
groups map (group =>
Group(group.id, group.options -- ruledOptions(group.id, rules)))
}
def composeRules(rules: Set[Rule]): Set[ComposedRule] = Set(
(
rules.toList
sort (_.op1.id < _.op1.id)
foldLeft (List[ComposedRule]())
) { (list, rule) => list match {
case ComposedRule(option, set) :: tail if option == rule.op1 =>
ComposedRule(option, set + rule.op2) :: tail
case _ => ComposedRule(rule.op1, Set(rule.op2)) :: list
}} : _*
)
def subset(groups: Set[Group], composedRule: ComposedRule) = (
groups
filter (_.id != composedRule.op.id)
map (group => Group(group.id, group.options --
(composedRule.set
filter (_.id == group.id)
map (_.option)
)))
)
def subsets(groups: Set[Group], composedRules: Set[ComposedRule]) = (
composedRules map (composedRule => subset(groups, composedRule))
)
def combinations(groups: Set[Group]) = (
groups.toList map (_.options.size) reduceLeft (_*_)
)
def allCombinations(groups: Set[Group], rules: Set[Rule]) = {
val fixedRules = fixRules(rules)
val composedRules = composeRules(fixedRules)
val cleanSet = cleanseSet(groups, fixedRules)
val otherSets = subsets(cleanSet, composedRules)
val allSets = otherSets + cleanSet
val totalCombinations = allSets.toList map (set => combinations(set)) reduceLeft (_+_)
totalCombinations
}
}
object TestCombinations {
val groups = Set(Group(1, Set(1, 2, 3, 4, 5)),
Group(2, Set(1, 2, 3)),
Group(3, Set(1, 2, 3, 4)))
val rules = Set(Rule(GroupOption(1, 1), GroupOption(2, 2)),
Rule(GroupOption(1, 1), GroupOption(3, 4)),
Rule(GroupOption(2, 2), GroupOption(3, 2)))
def test = ComputeCombinations.allCombinations(groups, rules)
}
このような直接役立つ答えので、お気軽に無視するかで...しかし;取り組んでいない類似したシステム思;率直に、 その他の些細な事例 私のプレの設定顔は丸である有しての計算の有効な組み合わせとなります。例として、モデル私は現在おいては、例えば18000候補品の普及80+の選定を行い、単一の選択/マルチカスタマーを選択します。を超えて最小のモデルはありません 利益 知数というだけでなレビューを書いて、その真実が表;いかり 強制 のルール(削除をしない、オートを選択ものとして適切にチェックするルールの破損)します。んが、必ずしも問題;私の現在のコードプロセスモデルとしてwebサービス)~450ms、その時間処理のためのxml入力/出力に出力します。場合は、入力/出力なxmlていただきたいと思います~150msである。
プレイしていただければと思い私は事業主にオープンソースのエンジンこれは戦いうものです。
なるだけでx^nオプションの数、xは選択肢の数当たりのオプション?
と思いZacたいと考えているのは正しい方向を向いている。を見てから発現の組み合わせ、第二次Cr[i,j]はよりもはるかに小さくC[k]。このキューブが各軸のグループです。各ポイントのキューブは特定の組み合わせます。半C[k]補正を除くラインオプションの両面ュールをご用意しております。る二次補正C[i,j]のみの場合どのようなラインを満たす一点の組み合わせオプション)のスペースのュールをご用意しております。なので数にかかわらずグループは、高次補正常にますます小さくなります。にこだわる
組み合わせ=C(no規則)-Cr締結システム[1]-Cr[2]-Cr[3]
また、下の番号の組み合わせとなります。今、わたしを知らないのサイズをご注文の訂正、考え方の観測をキューブとのできるもの桁の二次補正。で数によって異なります。アルゴリズムができるかどうかを決定するの継続を希望する方は、受注高は停止します。
コメント ダニエルスト:
アルゴリズムによく似合うからなかった自分自身を納得させまったので、インストールして使っていラノ-スカラ座もある。Unfortunaly得られません正しい。
例えばこのことを考える場合:
Group 1:
a1 a2 a3 a4 a5
Group 2:
b1 b2 b3
Group 3:
c1 c2 c3 c4
Group 4:
d1 d2 d3 d4 d5
Rules:
a1 <-> b2
a1 <-> c2
b2 <-> c2
b2 <-> d1
a2 <-> d2
私設私の基本的なふるいアルゴリズムにこの構成は、以下の結果227 組み合わせ):
Without rules => 300 Rules: [1] => 20 Rules: [2] => 15 Rules: [3] => 25 Rules: [4] => 20 Rules: [5] => 12 Order: 1 => 208 (diff: -92) Rules: [1, 2] => 5 Rules: [1, 3] => 5 Rules: [2, 3] => 5 Rules: [1, 4] => 4 Rules: [2, 4] => 1 Rules: [3, 4] => 5 Rules: [1, 5] => 0 Rules: [2, 5] => 0 Rules: [3, 5] => 1 Rules: [4, 5] => 0 Order: 2 => 234 (diff: 26) Rules: [1, 2, 3] => 5 Rules: [1, 2, 4] => 1 Rules: [1, 3, 4] => 1 Rules: [2, 3, 4] => 1 Rules: [1, 2, 5] => 0 Rules: [1, 3, 5] => 0 Rules: [2, 3, 5] => 0 Rules: [1, 4, 5] => 0 Rules: [2, 4, 5] => 0 Rules: [3, 4, 5] => 0 Order: 3 => 226 (diff: -8) Rules: [1, 2, 3, 4] => 1 Rules: [1, 2, 3, 5] => 0 Rules: [1, 2, 4, 5] => 0 Rules: [1, 3, 4, 5] => 0 Rules: [2, 3, 4, 5] => 0 Order: 4 => 227 (diff: 1) Rules: [1, 2, 3, 4, 5] => 0 Order: 5 => 227 (diff: 0) ***Combinations: 227***
しかしこのコードscala:
val groups = Set(Group(1, Set(1, 2, 3, 4, 5)), Group(2, Set(1, 2, 3)), Group(3, Set(1, 2, 3, 4)), Group(4, Set(1, 2, 3, 4, 5))) val rules = Set(Rule(GroupOption(1, 1), GroupOption(2, 2)), Rule(GroupOption(1, 1), GroupOption(3, 2)), Rule(GroupOption(2, 2), GroupOption(3, 2)), Rule(GroupOption(2, 2), GroupOption(4, 1)), Rule(GroupOption(1, 2), GroupOption(4, 2)))
私の答え 258.
私の計算にふるい方法というべての権利は留保されています。もできる固定アルゴリズム?ないでしてパズルを解いていく私の指何が間違っている。
問題は誰.
- のセキュリティ確保のためのソリューションズ#P-完了した場合にも制限するグループのradioboxes二つのオプション
- チェックがあった場合は選択のオプションと整合的制約はNP完全
- チェックがあった場合は選択のオプションと整合的制約ができ、場合に限毎にグループのradioboxes二つのオプション(2SAT)
従って、一般的に期待してはいけない多項式のアルゴリズム;が存在するアルゴリズムのようなP=NP.
よくお使いいただくために:
- 利用する近似アルゴリズムです。ればうつうsuspectibleします。
- 使用SATソルバー http://en.wikipedia.org/wiki/SAT_solver または関連ツールのための数(残念ながら出来ているものは知らなかっ);人々はたくさんのヒューリスティクスとそのプログラムは一般よりもかなり早く、お手作ります。もSAT競技会で、このフィールドを拡大しております。
- チェックが必要な場合などます。その問題は、追加の前提に、この変更複雑になります。
証明:
- のセキュリティ確保のためのソリューションズを容易いことを示#Pで減らすのに十分2SATます。か2SATインスタンスのように、
(p1なp2)およびp2はp3)
ユーザー値を選択するのと、p1、p2、p3.簡単に形を制約する力その命と絆を巡る物語が幕を開ける.その他にも多種多様なストッカーの可能な課題のp1、p2、p3、Boolean式はtrueです。
- 簡単に確認できる場合の選択オプションが許可されないことがNPので減らすのに十分3SATます。か3SATインスタンスのように、
(p1またはp2なp3)およびp2はp1はp4)
えのオプション:
グループp1 p1true p1false
グループp2 p2false p2true
グループp3 p3false p3true
グループp4 p4false p4true
グループclause_1 c1a c1b c1c
グループclause_2 c2a c2b c2c
clause_1きを制御する第項:(p1またはp2なp3).正確には、c1aますcheckable場合p1trueが選ばれたc1bますcheckable場合p2trueが選ばれたc1cますcheckable場合p3falseにしています。その制約について:
p1false <->c1a
p2false <->c1b
p3true <->c1c
と同じclause_2,constaintsいて
p2false <->c2a
p1true <->c2b
p4false <->c2c
ユーザが選ぶことができますべての回答数の構成>0)さんの証明があるとの評価変数のp1,...,p4の3SATインスタンスです。を及ぼしている場合、ユーザーさんが選択できるよう答えが一致した前提で利用可能になったかのよう構成=0)の3SATインスタンスはsatisfable.うな回答が0となる場合3SATインスタンスが命と絆を巡る物語が幕を開ける.
もちろんこの削減は多項式です。終了証明することにあります。
でない場合には満足していることの回答が0の場合ではNP困難の場合を無視しなconfigurators.(ばあ"偽"のオプションが全てのグループによる指数関数的には多くの選択肢ば"偽"を選びません。これはより複雑で説明しようと思います。)
この記簡単にsdcvvcの優れた答えがあるモンテカルロ法を近似すると良いですか。生成Nのランダム構成(Nが選択されるなどの電源の実験では高い:いるのを助けるのに十分ではありますここに、どのように多くのだ。外挿する比率を設定。