sum(xi)= 10、0 < = xi < = 2、i = 1,2、...、10.とするとxiのすべての整数解を求める。ありがとうございました。私はEuclideanアルゴリズムについて読んだことがありますが、2つの未知の変数のように見えます。ここではどのようなアルゴリズムを使用できますか?sum(xi)= b、線形制約付きのすべての整数解を見つける方法
答えて
再帰が最適です。あなたが最初にメモリに長いリストを作成する必要はありませんということで発電機の
def solutions(variables, sum_left, max_value):
if 0 == variables:
if 0 == sum_left:
yield []
else:
for i in range(0, max_value + 1):
if sum_left < i:
break
else:
for partial_solution in solutions(variables - 1, sum_left - i,
max_value):
yield [i] + partial_solution
for x in solutions(10, 10, 2):
print(x)
利益:ここでは発電機との自然なPythonのソリューションです。ここでは、発電機を使用せず、リストを構築することを避ける別の解決法があります。
def do_something_for_solutions(variables, sum_left, max_value, known=None):
if known is None:
known = []
if 0 == variables:
if 0 == sum_left:
do_something(known)
else:
for i in range(0, max_value + 1):
if sum_left < i:
break
else:
do_something_for_solutions(variables - 1, sum_left - i,
max_value, known + [i])
def do_something(solution):
print(solution)
do_something_for_solutions(10, 10, 2)
あなたが解決策を返却することを選択した場合、次のように、それが可能である:
def solutions(variables, sum_left, max_value):
if 0 == variables:
if 0 == sum_left:
return [[]]
else:
return []
else:
answer = []
for i in range(0, max_value + 1):
if sum_left < i:
break
else:
for partial_solution in solutions(variables - 1, sum_left - i,
max_value):
answer.append([i] + partial_solution)
return answer
for x in solutions(10, 10, 2):
print(x)
(あなたはパラメータを変更した場合、そのリストは簡単に巨大になることができると警告したことが...)
ありがとうございました! – daydayup
は、各整数パーティションは最大10重量部で
- を有し番号100、のinteger partitionsの順列を探しています。そして
- 各部分は、最大で15
例多くは確かにありますが、10です!それらはコンピュータによってまだ管理可能です。
編集:OPはそう、質問を編集した:あなたは本当にすべてのソリューションを持っているしたい場合は番号10は、各部分が、せいぜい2
ありがとうございました! – daydayup
で高々10部、との整数のパーティションに分割する必要があります:再帰的にいくつかの最適化と可能なすべての変数の割り当てを列挙:
- 最後の変数の値は、部分的な割り当てがもはや導くことができないことを見たときに検索が、剪定することができ、和制約
- から計算することができます有効な解に変換する(例えば、合計が既に大きい場合n 10または10の合計に到達する変数が少なすぎる場合)
ありがとう! – daydayup
- 1. Pythonで制約付き線形方程式を解く
- 2. 非線形制約付きのscipy.optimize
- 3. 無限大の解を持つ非方形線形システムのすべての解を見つけること
- 4. 追加制約付き線形代入
- 5. 条件付き制約Pythonのパルプモジュールの線形プログラム
- 6. すべての線形部分列を見つける方法R
- 7. 制約付きの置換の集合を見つける
- 8. oracleですべての外部キー制約を見つける方法
- 9. 曲線の線形部分を見つける方法
- 10. 混合整数型制約への線形プログラミング
- 11. このビューを制約付きで調整する方法
- 12. 三角形、正方形、円の下の整数点の数を見つける
- 13. はのFunc私は非線形制約付き非線形関数を解決するためにアコードの数学を使用しています<double[]>
- 14. Pythonの制約付き線形最適化
- 15. 最大公約数を見つけるための線形時間アルゴリズム
- 16. Pythonの線形プログラミング - 変数を整数に制限する方法
- 17. 整数制約の最適化問題を解決する
- 18. 線の交点矩形 - 交点を見つける方法?
- 19. Cプログラムで(すべての)整数オーバーフローを見つける方法は?
- 20. PostgreSQLの制約を見つける
- 21. 列内のすべての非整数を見つける
- 22. 制約付きMATLABの等高線プロット
- 23. 長方形内のすべての点を見つける?
- 24. 文化のデフォルトの日付形式を見つける方法
- 25. XPathでクラス "A"のすべてのクラス "B"を見つける
- 26. 2つの日付の差を見つけるときに負の整数を表示する方法
- 27. 非線形制約と2進変数による線形目的関数
- 28. CPLEXは等価制約付きの解を見つけることを拒否します
- 29. 整数配列の三つ組を見つける方法
- 30. MATLABを使用して非線形代数方程式の解を見つけるには?
あなたの例には非常に多くの解決策がありますが、それらをすべてリストすることはおそらく興味深いものではありません。あなたは本当に解決しようとしていますか? – Henry
例:解決策を見つけたり、解決策を探したりしたいのですか? –
私は本当にソリューションのすべての組み合わせを見つける必要があります。目的をモデル化するのが難しく、制約が隠されているので、すべての組み合わせが得られ、bruteforcefulllyがベストを見つける最適化問題を解決しています。 – daydayup