問題タブ [cellular-automata]
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.
c++ - C++ - 起動時に可変サイズの静的配列のパフォーマンス
データを行列 (配列の配列) に格納するセル オートマトン プログラムを作成しました。300*200 行列の場合、静的メモリ割り当て (例) を使用して、1 秒あたり 60 回以上の反復を実現できますstd::array
。
毎回プログラムを再コンパイルせずに、異なるサイズの行列を生成したいと考えています。つまり、ユーザーがサイズを入力すると、その行列サイズのシミュレーションが開始されます。ただし、動的メモリ割り当てを使用すると (例: std::vector
)、シミュレーションは 1 秒あたり最大 2 回の反復に低下します。どうすればこの問題を解決できますか? 私が頼ったオプションの 1 つは、ユーザーが選択すると予想されるもの (たとえば 2000*2000) よりも大きな静的配列を事前に割り当てることですが、これは無駄に思え、ユーザーの選択をある程度制限します。
私はどちらかできるかどうか疑問に思っています
a)メモリを一度割り当ててから、通常の静的配列のパフォーマンスのために何らかの方法で「フリーズ」しますか?
b) またはより効率的な操作を実行しstd::vector
ますか? 参考までに、私はマトリックスでのみ操作を行っmatrix[x][y] == 1
ています。matrix[x][y] = 1
この質問/回答によると、std::vector
ポインターを使用する場合と使用する場合のパフォーマンスに違いはありません。
編集:
UmNyobe の提案に従って、マトリックスを書き直して、 経由でアクセスする単一の配列にしmatrix[y*size_x + x]
ました。動的メモリ割り当て (起動時に 1 回サイズ変更) を使用して、パフォーマンスを 2 倍にして 1 秒あたり 5 回の反復にしました。
PaulMcKenzie のコメントによると、リリース ビルドをコンパイルしたところ、求めていたパフォーマンス (1 秒あたり 60 回以上の反復) が得られました。ただし、これはより多くの基盤であるため、ある方法の利点を他の方法よりも徹底的に定量化したいので、 a を使用しstd::chrono::high_resolution_clock
て各反復の時間を測定し、動的配列と静的配列のパフォーマンスの違いを発見しました (を使用した後)単一の配列行列表現) が誤差の範囲内に収まるようにします (反復あたり 450 ~ 600 マイクロ秒)。
ただし、デバッグ時のパフォーマンスが少し気になるので、両方とも残しておき、デバッグ時は静的配列に切り替えようと思います。
c - 3 状態セル オートマトン ルールはどのように生成されますか?
近傍を n=1 に制限しましょう (つまり、次世代セルを評価するには常に 3 つのセルが必要です)。
2 状態ルールの例を次に示します。ルールの上の行は特定の順序で生成されますが、下の行は数値 30 のビット表現であることに注意してください。
3 段階の CA に相当する単一の視覚化を見つけることができません。2 状態 CA のロジックに従って、27 の可能な結果が含まれている必要がありますが、どの順序で生成する必要があるかわかりません。下の行は 3 進数で 30 にする必要があります (合計 27 桁を占めるために先行ゼロを使用)。
(状態の数に関係なく) CA の従来の順序でこれらの順列を生成するための一般的なアルゴリズムはありますか?
事前にどうもありがとうございました。質問がばかげている場合は申し訳ありません。:(
multidimensional-array - 人生ゲーム処理
今のところ、速度よりも機能性を重視しています。
Eclipse での処理を使用して、コンウェイのライフ ゲームをコーディングしようとしています。上記のコードは、複数の点で機能不全です。
表示された世代は、私が望むよりもはるかに小さくウィンドウに表示されます。各セルを 2x2 ピクセルにし、行数と列数をウィンドウの高さと幅の半分にすることでこれを相殺する努力にもかかわらず、ウィンドウの一部しか占有しません。
また、数秒後に最初の世代が表示された後、ウィンドウで世代が更新されないように見えます。
変数 tNC は、0 から 7 までの任意の数値に等しくなければならないときに、多くの場合 0 に等しいことに気付きました。
netlogo - NetLogo BehaviorSpace は、マウスダウンによるパッチの初期設定を認識しません
mouse-down
初期設定がプリミティブを使用して手動で行われる状態の任意の構成を持つパッチ ラティスがあります。BehaviorSpace の実行中に、状態のランダムな構成から始まる任意の設定を移動します。
どうすれば修正できますか?
javascript - JSでConwayの「ライフゲーム」をプログラミングする
学校のプロジェクトで Conway の Game of Life の JavaScript バージョンをプログラミングする必要がありますが、エッジのループ処理で行き詰まっています。全体は正常に機能しますが、隣接セルの数を計算する関数は、端にあるセルでは機能しません (未定義の配列の外側の値を評価する必要があるため)。いくつかのオプションを試しましたが、それらはすべてプログラムの残りの機能を変更します。
グリッドの端で機能させるには何を追加する必要がありますか?
ありがとう!
java - セル オートマトン チェック ネイバー
私はかなり単純な問題を抱えていますが、それを理解できないようです。セルオートマトンの隣人のチェックに関係する論理エラーだと思います。隣人を成長させてチェックするために1秒に1回実行する私のコードは次のとおりです。
私のセルラー オートマトンでは単純な 12345/3 (生存/誕生) ルールを使用しています。
現在の問題は、中央に ALIVE/ON セルの 10x10 スペースがある 100x100 グリッドがあることです。コードを 1 回実行すると、すべてのセルが死んでしまいます。
さらに詳しい情報が必要な場合は、お気軽にお問い合わせください。前もって感謝します!