問題タブ [solver]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1079 参照

excel - VBA で if ステートメントが機能しない

私の最初の質問は、Excel VBA が 2 つの制約を持つ if ステートメントを認識するかどうかです。

実行中のスクリプトで両方の制約が満たされていることがわかっている場合に、if ステートメントで囲まれたコードをトリガーするのに問題があるためです。多分それは私の論理の問題です。

コードを含めました。ロジックまたは VBA のエラーを指摘できるかどうかを確認してください。背景情報 (コードにもいくつか含めました):

セル F71 (D40 と D41) を変更する 2 つのレバーがあります。要件は、F71 が 0 よりも大きく、F71 の現在の値 (変数 currentValueAdd に保存されている) よりも小さくなければならないことです。

したがって、上記の条件を満たす最適な組み合わせを見つけようとして、考えられるすべての組み合わせを繰り返して両方のレイヤーをループします。エクセルを開いて正常に動作することもあれば、まったく動作しないこともあります。結果は非常に不安定です。

0 投票する
1 に答える
328 参照

java - 迷路アルゴリズムちょっと動作します。すべての助けではなく、いくつかの迷路

時々機能する迷路アルゴリズムを使用していますが、常に機能するわけではありません。再帰を使用していますが、なぜそうでないのかわかりません。

0 投票する
2 に答える
1443 参照

java - Java を使用して D&D の迷路を解く手助けをする

私は、stackoverflow に投稿された他の質問をいくつか読んでいますが、検索アルゴリズムの数に少し圧倒されています。私はコードや、アルゴリズムの背景やおそらくいくつかの sudo コードを超えるページを探しているわけではありません。A* のようなアルゴリズムがあることは知っていますが、時間がないため、このアルゴリズムでプログラムを完成できるかどうかわかりません。迷路はサーバー プログラムを使用して生成され、ソルバーはサーバーに接続して、より多くのプレイヤー ピースにコマンドを送信します。サーバー プログラム内のメソッドにアクセスできません。D&D の迷路のように作られた迷路を解かなければなりません。ゲームの基本的な概要は次のとおりです。

古典的な D&D コンピューター ゲームはダンジョン (迷路) で構成されており、ゲームの目的はダンジョンを通り抜け、迷路の「入口」から入り、「出口」から出ることにあります。物事をより困難にするために、ダンジョンのレイアウトはアプリオリに知られておらず、障害物 (ゾンビ、ターピット、ドア) があり、通路に沿って見つかったオブジェクト (運賃、はしご、鍵) を使用して克服する必要があります。仕方。

他の投稿の多くは、迷路を完成させるために障害物を心配する必要がないことに気づきました。これは、障害物を補うためにアルゴリズムを適応させる大きな問題でしょうか? 右手の法則のようなものが迷路を解くのにうまくいくかどうか、そうでない場合は、迷路を解くのにできるだけ単純なアルゴリズムになるかどうか疑問に思っていました(プログラムをすぐに完成させなければならないという事実のため)。Objective-C でこのプログラムをもう一度完成させなければならないことを知っているので、他のリンクは素晴らしいでしょう。これが発生した場合、右手の法則よりも強力なものを実装したいと思います。助けてくれてありがとう。

0 投票する
1 に答える
857 参照

matlab - MATLABのodeソルバーイベント位置インデックス

odeMATLABのソルバーを使用して微分方程式のシステムを解こうとしているとします。

また、すべてターミナルである3つの異なるイベントを見つけるためのイベント関数を定義したとします。

ie場合によっては、イベントの1つの場所で返される量(ieソルバーを停止したイベントのインデックスであり、私の場合は1、2、または3である可能性があります)が必ずしも単一の数値ではないことに気付きました。しかし、2つの要素を持つベクトル(通常、これらの要素は同一です)

ieスカラーではない場合、それはソルバーを停止しましたかie(1)ie(2)

0 投票する
1 に答える
13123 参照

function - マトラブode45. 呼び出し中に内部のパラメーターを変更する方法は?

私はMatlabが初めてです。あなたが私を助けてくれることを願っています。ODE45 関数を使用して ODE 系を解かなければなりません。これが私の等式を説明する関数です。

パラメータ F に注意してください。

次に、スクリプト .m-file で、「for ループ」で ode45 関数を呼び出します。各反復中に、パラメーター F を変更し、それを「rateEquations」関数に渡す必要があります。しかし、私はそれを実現する方法がわかりません。

ODE45 を呼び出す前に F を変更します。

等々 ...

前もって感謝します。

0 投票する
1 に答える
1933 参照

matlab - MATLAB でのイベントの場所に関する質問

matlab で次のように仮定します。

[t, x, te, xe, ie] = ode15s(@myfunc, [tStart tFinal], x0, odeset('Events', @events));

質問1

1a) 関数は、ソルバーのステップが成功した後にのみevents呼び出されます。これは本当ですか?

1b) ソルバーがステップを成功させた直後に、最後の呼び出しが成功したステップにつながる呼び出しではmyfunc ない可能性はありますか?

1c)events関数に複数の終了イベントが含まれていて、ステップが成功したときにそのうちの 2 つ (1 つだけでなく) が発生したことが検出された場合、ソルバーの動作はどうなりますか?

質問2

myfunc次のコードが含まれているとします

checkの関数はどこにありますかx

この問題を解決する1 つの方法は、イベント関数を使用しないことです。私の経験では、オードソルバーはそのような問題を解決できます。

この問題を解決するもう 1 つの方法は、イベント関数を使用してcheck(x) - 2 == 0、1 つのターミナル イベントdirection = 1と の別のターミナル イベントを見つけることですdirection = -1myvarいずれかのイベントでソルバーが停止した後、たとえば、2 つのイベントを区別するためにグローバル変数が適切に設定され、停止した場所からシミュレーションが続行されます。その場合、コードは次のようにmyfuncなります

どちらの方法でも、単純なケースでは正しい結果が得られます。しかし、私は非常に複雑な問題 (上記以外の追加のイベントと、場合によっては解決できることが証明されている微分方程式の不連続な右側の部分) を解決しようとしています。 2つ目よりも結果。

頌歌が前に解を返さないかtFinal、正しい解を返すと言う人もいるかもしれませんが、右側の部分が不連続であるため、解が存在する間はソルバーが解を返さない可能性があります。

したがって、ある意味では、問題は次のとおりです。最初の方法と 2 番目の方法を使用する場合の実際的理論上の違いは何ですか?

0 投票する
2 に答える
1171 参照

python - 困ったレベルのソルバーを書くためのアドバイス

Vexed は人気のあるパズル ゲームであり、多くのバージョンが利用可能です (一部は GPL フリー ソフトウェア)。小さな画面のデバイスに非常に適しています。バージョンは、Android、iOS などで利用できます。PalmOS プラットフォームで発見しました。

楽しみのために、困ったレベルを解決するソルバーを書きたいと思います。

Vexed は、ブロック スライディング パズル ゲームです。ルールを簡単に説明すると、次のようになります。

0) 各レベルは四角形のグリッドで、通過できない境界線で囲まれています。どのレベルでも、通過できない塗りつぶされた四角がいくつかあります。さまざまな色のブロックがいくつかあります。これらは、下の境界線、黒の正方形、または他のブロック (異なる色) に置かれている可能性があります。ほとんどのレベルは 8x8 以下です。

1) ブロックを左右にスライドさせる操作しかできません。ブロックが移動する各正方形は、1 回の移動としてカウントされます。

2) 重力があります。ブロックをスライドさせた後、ブロックが塗りつぶされた正方形または別のブロックに置かれなくなった場合、ブロックは別のブロック、塗りつぶされた正方形、または下の境界線に収まるまで落下します。二度と持ち上げることはできませんのでご注意ください。

3) 同じ色のブロックが 2 つ以上接触すると、ブロックは消えます。チェーンが可能であることに注意してください: 支持ブロックが消えると、その上に載っていたブロックが落下し、同じ色のブロックがさらに接触して消える可能性があります。

4) 目標は、最小限の手数ですべてのブロックを消すことです。各レベルには、移動の最小数を示す「標準スコア」があります。(元の PalmOS ゲームでは、「パー スコア」は必ずしも最小ではありませんでしたが、最近プレイしている Android バージョンでは最小です。)

これは、ゲームの PalmOS バージョンのソースを含む SourceForge プロジェクトです。

http://sourceforge.net/projects/vexed/

私は経験豊富なソフトウェア開発者ですが、AI に関する作業 (パスファインディング、問題解決など) を実際に行ったことはありません。正しい方向に向けるためのアドバイスを探しています。

現時点では、私が追求すべき基本的な戦略が 2 つあります。

0) すべてのゲームで考えられるすべての解を調べて、すべての解のリスト (最良の解から順に) を返す総当たりソルバを、おそらく速度のために C で作成するだけです。これは合理的なアプローチでしょうか?それとも可能な移動の総数がこれを遅くしすぎますか? 10x10 より大きいレベルは存在しないと思います。

1) いくつかの AI っぽいアルゴリズムを学び、おそらく Python を使用して、問題を解決するためにそれらを巧妙な方法で適用します。

PalmOS Vexed のソースにはソルバーが含まれていることに注意してください。著者によると、「ソルバーは A* とプルーニング ヒューリスティックを使用してソリューションを見つけます。」

http://www.scottlu.com/Content/Vexed.html

したがって、私が追求できる戦略の 1 つは、A* アルゴリズムを研究してから、既存のソルバーの C++ コードを研究し、そこから学ぼうとすることです。

これを Python と C タグでタグ付けしますが、何か他のものを使用する必要があると思われる場合は、売り込みを行ってください。検討します!

「バラエティ25パック」のレベルのアスキーアートです。レベル48、「ダークロード」。私はほとんどのレベルを解決することができますが、これは私を悩ませました. このレベルの標準スコアは 25 手ですが、まだまったく解決していません。

この図では、境界線はアンダースコア、縦棒、および等号文字です。塗りつぶされた四角は「#」です。オープン スペースはスペース文字です。色付きのブロックは「g」(緑)、「b」(青)、「p」(紫)です。

ちなみに、ソルバーへの入力ファイル形式はレベルの ASCII アートにする予定です。

アドバイスをありがとう!

編集:

回答を受け付けました。回答をくださった方々、ありがとうございました。

これは半力ずくのソルバーです。A*は使っていませんが、木の不採算枝を短く切っています。

レベル データを含む単純なテキスト ファイルを読み込みます。文字はブロック、'_' (アンダースコア) は空白、'#' は埋め込みスペースです。

レベル ファイルの例を次に示します。

私のコンピューターでは、14252 の異なるボード構成を考慮して、"Dark Lord" をほぼ正確に 10 秒で解決します。Python 3 ではなく Python 2.x で書いたのは、これを PyPy で試してどれだけ高速になるかを確認したいからです。

次に、これに A* を適用する作業を行う必要があります。「オレンジ色のブロックを別のオレンジ色のブロックに近づけるよりも、別のオレンジ色のブロックに近づける方が良い」のようなメトリックを作成して、それを機能させることができると思います。(最小手数である解が 3 つある場合は、3 つすべてを見たいと思います。)

この Python プログラムに関するコメントを歓迎します。書いてて楽しかった!

編集: PyPy でこれを試しましたが、今まで更新したことはありません。私が PyPy で使用したコンピューターでは、ソルバーは CPython を使用して「Dark Lord」レベルを 10 秒で解決できました。PyPy では 4 秒に短縮されました。クールな部分は、JIT が開始されたときに速度が向上したことです。このプログラムは、動作中にドットを出力します。PyPy では、ドットの開始が遅くなり、その後加速することがわかります。PyPy は気の利いたものです。

0 投票する
1 に答える
1230 参照

c++ - 未定方程式系用の C++ ライブラリ

このような未定のシステムを解決するために、C ++でライブラリを探していました

q はベクトル、w、x、y、z 変数および a、b、c、d 定数です。

st

ソルバー、アルゴリズムなどを見つけると非常に便利です。未定システムを解決できるライブラリをいくつか見つけましたが、さらに係数間の距離を最小限に抑える必要があります。

前もって感謝します

アルトーバー

0 投票する
1 に答える
1080 参照

java - Apache Commons Math SimplexSolver で binary、int、double などの決定変数タイプを設定するには?

Apache Commons Math でバイナリint、、などの決定変数タイプを設定する方法は? 以下のプログラムの出力は次のとおりです。doubleSimplexSolver

決定変数の型intを notにしたいdouble333, 0, 8325整数の決定変数として解決された場合、出力は次のようになります。

0 投票する
2 に答える
4328 参照

matlab - matlabは、大きくて対称でスパースな線形システムをどのように解くのですか?

つまりA\b、非常に大きく、対称でスパースなAを実行する場合、matlabはどのアルゴリズムを使用しますか?