3

numpy または sympy を使用して線形ディオファントス方程式系を解く必要があります。

numpy の linalg.solve/linalg.lstsq メソッドを制約して整数解のみを返す方法はありますか? (おそらくそうではありませんが、私は尋ねるべきだと思いました)

Sympy の diophantine ソルバーを調べたところ、システム全体を解くには適用できないようです

私が取り組んでいる問題は、

P1(X) + P2(Y) = TargetPro
F1(X) + F2(Y) = TargetFat
C1(X) + C2(Y) = TargetCarb

この場合、X、Y、Z はおおよそのサービング サイズを表し、P1/F1/C1 はそれぞれプロ/脂肪/炭水化物プロファイルになります。

この論文に基づいて https://www.math.uwaterloo.ca/~wgilbert/Research/GilbertPathria.pdf

行削減を実行して、このシステムの参照 (行階層形式) を見つけ、それを sympy のソルバーにプラグインできるようです。

それについてもっと簡単な方法はありますか?

以下に簡単な例を示します。

pro = [4,5]
fat = [1,2]
carb = [3,6]

A = np.array((pro, fat, carb))
b = np.array([22,12,21])

print(np.linalg.lstsq(A, b))

整数解 [3,2] を期待していましたが、代わりに [ 2.16666667, 2.66666667] が得られました。

どちらの解も正しいですが、解を整数解のみにバインドしたい

4

0 に答える 0