RSS Twitter Facebook

2017/06/26 (2017年06月 のアーカイブ)

やたら変数の多い連立一次不等式を解きたい

「太郎君は、1000円持ってりんごを3個とみかんを2個買ってきました。
りんごとみかんを3個ずつ買いたかったのですが1000円では足りませんでした。
みかん6個なら1000円で買えたのに。」

こんな奴。ただし、変数が200個ほどある。こういうのが得意なのはMathematicaだっけ? とか思いつつ取りあえず使えそうなMaximaとかWolframAlphaなんかを試しつつ、ちょっと求めてるものとは違うので、手作業で地道に進めていい感じに収束してきたかと思った所で解が存在しなくなるという致命的な間違いに気づいた。どうやらどこかで計算間違いをしてエラーが混入してそれが伝播したらしく、日曜日の半分くらいを費やしたデータがゴミクズと化した。

これはやはり人間が手作業でやるべき事ではなかった...と更に半日ほど反省しつつ、この問題を解くためだけのプログラムを書く。一般的に使えるように実装すると大変な事になるのはわかっているので、式の形式を固定して

x + 2*y + 3*z ... > 0

みたいな奴だけ。左辺は 数値 * 変数の積算、不等号は > または < のどちらかで右辺は定数。これをバカバカと逐次で入れていって変数の取り得る値を収束させるという感じのもの。



何でこんな事を、と言うとマルチエフェクターの各エフェクトのDSP消費量の見積もりなのだけどな。相当脱線している。
「OrangeLimとSweetDriveを入れたらもうShimmerReverbはDSPがフル状態で入んないや」
とか
「SeeetDriveをGreatMuffに変えたら入るな」
みたいな事態が頻発するので、それぞれの正確なDSP消費状況を把握しようとしてこのざまです。


多分真面目に実装すれば、何か使い道があるソフトになるかも知れないけど、とりあえずいいや。
http://www.g200kg.com/demo/inequalitysolver/

Posted by g200kg : 2017/06/26 21:23:38