問題タブ [state-machine]
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.
java - Javaのスレッド化されたステートマシン
変更を待機している状態でスレッドを保持する方法はありますか?つまり、何かが発生するまで待つことを意味します(varの変更、メソッドの呼び出しなど)。おそらく、イベントリスナー、または同期されたオブジェクト/メソッドを使用する必要があります。
このようなステートマシンの通常のアプローチ
これは、シングルスレッド(およびGUIなし)アプリケーションで機能するdo {..} while(true)ループを使用しますが、スレッドでは使用できません..(少なくともすべてのスレッドステートマシンにコアを使用する必要があります) )。
したがって、プロセッサがタスクを消費することを避けるために、単純な(そして醜い)方法は「定期的なチェッカー」です。つまり、Sleepを追加することは、同期されたオブジェクトを定義し、スレッドSleepの代わりにwaitを使用することです。
例:
欠点は、同期を使用して複雑さを追加すること、またはTIME_CONST内で発生するものがすべて表示されないことです。
これを行うための他のアイデアを知りたいのですが、ありがとう!
java - N 個の状態とそれらの間の遷移を含むデザイン パターンの問題
目の前に問題があり、どのデザイン パターンを使用すればよいかわかりません。問題は次のようになります。
「N」個の状態を持つシステムを構築する必要があり、私のシステムは、いくつかの条件に応じて、任意の状態から他の状態に遷移する必要があります。例:条件1で状態1から3へ、条件2で状態1から4へ移動。
ある状態から別の状態への遷移でさえ、2 つ以上の異なる条件で実行できます。
たとえば、状態 1 から状態 3 への遷移は、次の場合に実行できます。
条件 1:「日曜日です」
条件 2:「雨が降っています」
条件 3:「雨と日曜日」
それぞれの条件で、状態 3 での処理は次のようになります。違う。
問題を読みやすく理解できたと思います。親切に助けてください。
どうもありがとう
c# - HandleExternalEventActivityで処理されたイベントインスタンスにアクセスします
私はステートマシンを持っていますが、いくつかのステートはHandleExternalEventActivityによって所有されています。単純な文字列フラグを持つイベントを受け入れます。この文字列に基づいて、次の状態をアクティブにする必要があるディスパッチが必要です。最も明白なのはIfElseActivityを使用することですが、IfElseからこの文字列にアクセスする方法がわかりません。ステートマシン全体にプロパティを配置する最も簡単な方法ですが、何らかの理由で避けたいと思います。
ruby - 無限ストリーム用の (純粋な Ruby) Ragel パーサーをカプセル化しますか?
Ragel を使用してステート マシンで (ソケットからの) バイトの連続ストリームを解析したい
ただし、私が見つけたすべての例は、1回のパスで完全なファイルを解析している ( Gherkin lexer のように)か、Ragels C Target ( mongrel HTTP1.1 Parserのように)を使用しています。
Ragel State マシンをインスタンス化し、それにバイトを追加して、既存の状態をそのまま維持する方法に関するアドバイスや例を探しています。
私が探している最終的なインターフェースは次のようなものです:
Ragel でそれを行う方法についてのアドバイスは大歓迎です。別のステートマシンを手動でコーディングするよりも、それを使用したいと思います。
Ragel は適切なツールではないのでしょうか。そうでない場合: 代わりに何を使用すればよいですか?
optimization - ネストされた状態からネストされた状態への移行のベスト プラクティス (図を参照)
私は、単一のスレッド化されたプログラミング言語 (Actionscript) でネストされた状態遷移を実装するための最良の方法に頭を悩ませようとしています。このビヘイビア ツリーのような構造があるとします。
ここで、各リーフ ノードが、ギャラリーの画像や、ページ ビューにネストされた投稿ビューにネストされたコメントのように、Web サイトの目的地であると想像してください...そして、目標は、リーフからアニメーション化されたトランジションを実行できるようにすることです。ノードからリーフ ノードへ、前のツリーを (下から上へ) アニメーション化し、現在のツリーで (上から下へ) アニメーション化します。
そのため、一番左下のリーフ ノードにいて、一番右下のリーフ ノードに移動したい場合は、次のようにする必要があります。
- 左下のノードから移行
- 完了すると (たとえば、アニメーションの 1 秒後)、親から移行します。
- 完了すると、その親から移行します
- 完了すると、一番右の親に遷移します
- 完了時、右端の子に遷移
- 完了時、リーフで遷移
私の質問は:
これらの各ノードを HTML ビュー (リーフは「部分」であり、レールから用語を借用したもの)、またはサブコンポーネントをネストしている MXML ビューとして想像すると、アプリケーションルート、上記のように遷移をアニメーション化する最良の方法は何ですか?
1 つの方法は、考えられるすべてのパスをグローバルに保存してから、「アプリケーション、このパスから遷移し、このパスに遷移します」と言うことです。アプリケーションが非常に単純な場合、これは機能します。これが、Actionscript フレームワークであるGaiaのやり方です。ただし、任意にネストされたパスに出入りできるようにしたい場合は、次の理由により、それをグローバルに保存できません。
- Actionscript はそのすべての処理を処理できませんでした
- 良いカプセル化のようには見えません
したがって、この質問は次のように言い換えることができます。どのように左端の葉のノードとその親を葉から開始し、右端の葉のノードでルートから開始してアニメーション化しますか? その情報はどこに保存されますか (何を移行するか)。
別の可能な解決策は、「アプリケーション、前の子ノードから移行し、それが完了したら、現在の子ノードに移行する」ということです。ここで、「子ノード」はアプリケーション ルートの直接の子です。次に、アプリケーション ルートの一番左の子 (2 つの子ノードがあり、それぞれに 2 つの子ノードがあります) は、正しい状態にあるかどうかを確認します (その子が「移行されている」場合)。そうでない場合は、それらに対して「transitionOut()」を呼び出します...そのようにして、すべてが完全にカプセル化されます。しかし、それはかなりプロセッサ集約的であるようです。
どう思いますか?他の代替手段はありますか?または、 AI Behavior Treesまたは Hierarchical State Machines で、非同期状態遷移を実際に実装する方法を説明している優れたリソースを教えてください。
- オブジェクトのどこから「transitionOut」を呼び出すのでしょうか? ルートまたは特定の子から?
- 状態はどこに保存されますか? グローバルに、ローカルに?「transitionIn()」と「transitionOut()」を呼び出すものを定義するスコープは何ですか?
私は AI とステート マシンに関する多くの記事/本を見たり読んだりしましたが、ビヘイビア ツリーに参加する数百のビュー/グラフィックスを含む複雑な MVC オブジェクト指向プロジェクトで非同期/アニメーション遷移を実際に実装する方法を説明するものをまだ見つけていません。
一番親のオブジェクトからトランジションを呼び出すべきですか、それとも子からトランジションを呼び出すべきですか?
ここに私が調べたもののいくつかがあります:
- ゲーム ビヘイビア AI のアーキテクチャ: ビヘイビア マルチキュー
- 階層ステート マシン — 基本的に重要な設計方法
- 例によるゲーム AI のプログラミング
- 目標主導のエージェントの行動
- トロイ・ガードナーによる高度な状態管理
- Troyworks の AS3 COGS ライブラリ
- ビヘイビア ツリー設計への一般的なアプローチ
- 非同期感覚システムのイベント駆動条件の構築
これは必ずしも AI の問題ではありませんが、ネストされた状態のアーキテクチャを Web サイトに適用する方法を説明する他のリソースはありません。これらは最も近いものです。
質問の別の言い方: 状態の変化をアプリケーションにどのようにブロードキャストしますか? イベントリスナーはどこに置いていますか? 任意にネストされている場合、アニメーション化するビューをどのように見つけますか?
注: 私はゲームを構築しようとしているのではなく、アニメーション化された Web サイトを構築しようとしているだけです。
ruby-on-rails - Model-View-Controller は人工知能やビヘイビア ツリーとうまく連携できますか?
私は MVC のバックグラウンド (Flex と Rails) から来ており、コードの分離、再利用性、カプセル化などのアイデアが大好きです。これにより、物事をすばやく構築し、他のプロジェクトでコンポーネントを再利用することが容易になります。ただし、複雑で状態駆動型の非同期のアニメーション化されたアプリケーションを構築しようとする場合、MVC の原則に固執することは非常に困難でした。
アプリケーション内の多くのネストされたビュー間でアニメーション化されたトランジションを作成しようとしていますが、自分自身を誤解させているかどうかを考えさせられました... MVC の原則を人工知能 (ビヘイビア ツリー、階層ステート マシン) の原則に適用できますか? 、ネストされた状態)、ゲームのような? これらの 2 つの分野はうまく連携していますか?
HTML CMS システムなどのように、物事が静的である場合、ビュー/グラフィックスがそれ以外のものを無視するのは非常に簡単です。しかし、複雑な状態駆動型の遷移を追加し始めると、すべてが他のすべてのことを知る必要があるように思われ、MVC がほとんど邪魔になります。どう思いますか?
アップデート:
例。今、私はFlexでWebサイトに取り組んでいます。アプリケーション内のネストされたすべての要素を適切にアニメーション化するには、それらを AI エージェントと見なす必要があるという結論に達しました。したがって、各「ビュー」には独自のビヘイビア ツリーがあります。つまり、コンテキストに基づいてアクション(表示および非表示) を実行します。(選択したデータは何かなど)。そのためには、ViewController タイプのものが必要です。私はそれをプレゼンターと呼んでいます。ビュー (MXML でレイアウトされたグラフィックス)、プレゼンター (アプリケーションの状態とネストされた状態に基づいてビューが実行できるアニメーションとアクションを定義する)、およびビューにデータを表示するためのプレゼンテーション モデル (発表者を通して)。また、値オブジェクト用のモデルと、URL やデータベース呼び出しなどを処理するためのコントローラーもあります...すべての通常の静的/html のような MVC のもの。
しばらくの間、私はこれらの「エージェント」をどのように構成して、周囲のコンテキスト (何が選択されているかなど) に応答できるようにするかを考えていました。他のすべてを認識する必要があるように思えました。そして、ゲームのパス/ナビゲーション テーブル/リストについて読み、すぐに、すべてのエージェントが実行できるすべての事前計算されたアクションの中央に格納されたテーブルがあると思いました。そのため、彼らが実際にコードをどのように構成しているのか疑問に思いました。
3D ビデオ ゲームのすべては大きな秘密であり、ビヘイビア ツリーの定義など、グラフィカルな UI/エディタで行われていることがわかります。そのため、エージェントが環境にどのように応答するか、またコードをモジュール化してカプセル化する方法を構造化するために、ある種の MVC を使用しているのかどうか疑問に思っています。
python - Python ステートマシンの設計
このスタック オーバーフローの質問 (C ステート マシンの設計)に関連して、スタック オーバーフローの皆さん、Python ステート マシンの設計テクニックを私 (およびコミュニティ) と共有していただけますか?
現時点では、次のエンジンに基づいています。
しかし、Python の動的な性質 (動的ディスパッチなど) を活用しながら、それを行う方法はたくさんあると確信しています。
マシンの「状態」から「イベント」を受けて「発信」する「エンジン」の設計手法を追求しています。
vb.net - ステート マシンのワークフロー - VB.NET
vb.net で非常に単純なステート マシン クラス ライブラリ プロジェクトを作成しています。これには、CreateApplication、ProcessApplication、および CompleteApplication の 3 つの状態しかありません。同じプロジェクトで作成されたインターフェイスがあります。ApplicationService.CreateApplication(obj of ApplicationDetail) を呼び出して Web アプリケーションから呼び出しています。
ApplicationService.vb にもその実装があります
私の問題は、それを実行しようとすると、 workflowInstance の値を取得していることです。InstanceId を空にします。
過去2日間からこれを修正しようとしています。誰か助けてください。
前もって感謝します!
algorithm - セットデータを時間内に使用および分析するためのアプローチ
私はギャラリーのインタラクティブなインスタレーションを設計しています。そこでは、8つの入力トランスデューサーのどれがブリッジされているかを示す入力を受け取ります。たとえば、誰かがストリップ番号1に触れた場合、私はそれを検出することができます。便宜上、それを{1}と表記しましょう。1と2を同時にタッチすると、その接続を検出できるようになります。これを{1-2}と呼びましょう。ある人がストリップ1と2に触れ、別の人がストリップ3と5に触れると、状態{1-2、3-5}を検出できます。
これらの接続のリストでは、セット間のオーバーラップは、セットの和集合を作成するだけです。{1-2、2-3}は検出されませんが、代わりに{1-2-3}が表示されます。
私の仕事は、これらの条件に応じてイベントを発生させるコードを書くことです。入力をポーリングし、タッチされたストリップのグループのリストを取得してから...
だから私の質問は-このようなサブセットのリストの興味深い特性は何ですか?どのようなパターンを監視できますか?接続の可能なグループのリストを列挙するための式は何ですか?このデータのプロパティに関する洞察が豊富であればあるほど、データを興味深く適切なイベントにマッピングすることができます。マッピングはメモリレス(つまり、特定の入力状態に対して決定論的)である場合もあれば、シーケンスに応答する場合もあれば、シーケンスのタイミングに応答する場合もあります。私はこれをとることができる方向性のいくつかの手がかりを持っていますが、アルゴリズムとシーケンスの知識がもう少しある人々がここで私にいくつかの指針を与えることができることを願っています。
.net-4.0 - Windows Workflow Foundation 3.5で作成されたステートマシンはバージョン4.0と互換性がありますか?
バージョン3.5で作成されたステートマシンがある場合、.NET / Windows Workflow Foundation 4.0にアップグレードできますか、それとも機能を再作成する必要がありますか?4.0はステートマシンをサポートしていないと聞いた/読んだ。最後に、3.5でステートマシンを使用している場合、4.0に移行するための計画は何ですか?