説明の中で優秀な特性であると考えられている特徴を請求項で説明する。しかしながら説明自体とその好ましい使用モードと、さらにその目的及び利点は、添付図面を伴った有効な実施形態の以下の詳細な説明を参照することにより最良に理解されるであろう。
図面、特に図1−2を参照すると、例示的な実施形態が実施されることができるデータ処理環境の例示的な形態が示されている。図1−2は単なる例示であり、異なる有効な実施形態が行われることができる環境に関して任意の限定を主張または示唆することを意図しないことを認識すべきである。示されている環境に対する多くの変形が行われることができる。
ここで使用されている語句「少なくとも1つ」はアイテムのリストと共に使用されるとき、1以上のアイテムの異なる組合せが使用されることができ、リスト中の各アイテムの1つだけが必要とされることを意味する。例えば「アイテムA、アイテムB、アイテムCの少なくとも1つ」は例えば限定ではなくアイテムAまたはアイテムAおよびアイテムBを含むことができる。この例はアイテムA、アイテムBおよびアイテムCまたはアイテムBとアイテムCを含むことができる。
図面を参照すると、図1は有効な実施形態を構成しているデータ処理システムのネットワークの説明図を示している。これらの示されている例では、ネットワークデータ処理システム100は人間の行動のモデル化及びシミュレーション開発フレームワークを実行するために使用される。このフレームワークは人間の行動を予測する能力を与える。
ネットワークデータ処理システム100は有効な実施形態が実施されることができるコンピュータ及びその他の装置のネットワークである。ネットワークデータ処理システム100はネットワーク102を含み、これはネットワークデータ処理システム100内で共に接続されている種々の装置とコンピュータとの間に通信リンクを設けるために使用される媒体である。ネットワーク102はワイヤ、無線通信リンクおよび/または光ファイバケーブルのような接続を含むことができる。
示されている例では、サーバ104とサーバ106は記憶装置108と共にネットワーク102に接続されている。さらにクライアント110、112、114はネットワーク102に接続されている。これらのライアント110、112、114は例えばパーソナルコンピュータ、ワークステーションコンピュータ、パーソナルデジタルアシスタントであってもよい。示されている例では、サーバ104はブートファイル、オペレーティングシステム画像、アプリケーションのようなデータをクライアント110、112、114に提供する。クライアント110、112、114はこの例ではサーバ104とサーバ106に対するクライアントである。ネットワークデータ処理システム100は示されていない付加的なサーバ、クライアント、他の装置を含むことができる。有効な実施形態における人間の行動を予測するためのフレームワークは、ネットワークデータ処理システム100中の1以上のデータ処理システムを使用して構成されることができる。
図2を参照すると、データ処理システムの図が例示的な実施形態にしたがって示されている。この例示的な例では、データ処理システム200はプロセッサ装置204、メモリ206、永続的な記憶装置208、通信装置210、入力/出力(I/O)装置212、ディスプレイ214間で通信を行う通信構造202を含んでいる。
プロセッサ装置204はメモリ206にロードされることのできるソフトウェアの命令を実行する役目を行う。プロセッサ装置204は特定の構成に応じて1以上のプロセッサのセットまたはマルチプロセッサコアであってもよい。プロセッサ装置204は主プロセッサが単一のチップ上で二次プロセッサと共に存在する1以上の異種プロセッサシステムを使用して構成される。別の例示的な例として、プロセッサ装置204は同じタイプの多数のプロセッサを含む対称型マルチプロセッサシステムであってもよい。
これらの例ではメモリ206は例えばランダムアクセスメモリまたは任意の他の適当な揮発性または不揮発性記憶装置であってもよい。永続的記憶装置208は特定の構造にしたがって種々の形態を取ることができる。例えば永続的記憶装置208は1以上のコンポーネント又は装置を含むことができる。例えば永続的記憶装置208はハードドライブ、フラッシュメモリ、書換可能光ディスク、書換可能磁気テープ、又は幾つかのそれらの組合せであってもよい。永続的記憶装置208により使用される媒体は取外し可能であってもよい。例えば取外し可能なハードドライブは永続的記憶装置208で使用されることができる。
通信装置210はこれらの例では他のデータ処理システム又は装置との通信を行う。これらの例では通信装置210はネットワークインターフェースカードである。通信装置210は物理的及び無線通信リンクの一方又は両者の使用により通信を行うことができる。
入力/出力装置212はデータ処理システム200に接続できる他の装置によるデータの入力および出力を可能にする。例えば入力/出力装置212はキーボードおよびマウスを通してユーザ入力に対する接続を行うことができる。さらに入力/出力装置212は出力をプリンタへ送信できる。ディスプレイ214は情報をユーザへ表示するための機構を提供する。
オペレーティングシステム及びアプリケーション又はプログラムの命令は永続的記憶装置208に位置される。これらの命令はプロセッサ装置204により実行するためにメモリ206へロードされることができる。異なる実施形態のプロセスはメモリ206のようなメモリ中に位置されることができるコンピュータ実行命令を使用してプロセッサ装置204により行われることができる。これらの命令はプロセッサ装置204のプロセッサにより読取られ実行されることができるプログラムコード、コンピュータの使用可能なプログラムコード、またはコンピュータの読取り可能なプログラムコードを指している。異なる実施形態ではプログラムコードはメモリ206又は永続的記憶装置208のような異なる物理的または有形のコンピュータの読取り可能な媒体で実施されることができる。
プログラムコード216は選択的に取外し可能なコンピュータの読取り可能な媒体218で機能形態で位置され、プロセッサ装置204により実行されるためにデータ処理システム200へロードされるか転送されることができる。プログラムコード216とコンピュータの読取り可能な媒体218はこれらの例ではコンピュータプログラムプロダクト220を形成する。1例では、コンピュータの読取り可能な媒体218は永続的記憶装置208の一部であるハードドライブの有効な記憶装置へ転送するための、例えばドライブまたは永続的記憶装置208の一部であるその他の装置へ挿入又は位置付けられる光または磁気ディスクのような実体的形態であってもよい。実体的形態では、コンピュータの読取り可能な媒体218はデータ処理システム200に接続されるハードドライブ、サムドライブ、またはフラッシュメモリのような永続的記憶装置の形態を取ってもよい。コンピュータの読取り可能な媒体218の実体的形態はコンピュータの記録可能な記憶媒体とも呼ばれている。幾つかの例では、コンピュータの読取り可能な媒体218は取外し可能でなくてもよい。
代わりに、プログラムコード216は通信装置210への通信リンクを通しておよび/または入力/出力装置212への接続を通してコンピュータの読取り可能な媒体218からデータ処理システム200へ転送されることができる。通信リンクおよび/または接続は例示的な例では物理的又は無線であってもよい。コンピュータの読取り可能な媒体はプログラムコードを含む通信リンク又は無線送信のような無形媒体の形態を取ってもよい。
データ処理システム200のための示されている異なるコンポーネントは異なる実施形態が実行されることができる方法に対して構造的な限定を与える意図はない。異なる例示的な実施形態はデータ処理システム200について示されているコンポーネントに加えて又はその代わりのコンポーネントを含むデータ処理システムで実行されることができる。図2の他のコンポーネントは示されている例示的な例から変化されることができる。
1例として、データ処理システム200の記憶装置はデータを記憶できる任意のハードウェア装置である、メモリ206、永続的記憶装置208、コンピュータの読取り可能な媒体218は実体的形態の記憶装置の例である。
別の例では、バスシステムは通信構造202を構成するために使用されることができ、システムバス又は入力/出力バスのような1以上のバスからなることができる。勿論、バスシステムはバスシステムに取付けられる異なるコンポーネント又は装置間のデータの転送を行う任意の適当なタイプのアーキテクチャを使用して構成されることができる。さらに、通信装置はモデム又はネットワークアダプタのようなデータの送信及び受信に使用される1以上の装置を含むことができる。さらにメモリは、例えば通信構造202に存在できるインターフェースおよびメモリ制御装置ハブで見られるようなメモリ206又はキャッシュであってもよい。
示されている例では、ネットワークデータ処理システム100はネットワーク102を有するインターネットであり、相互に通信するためのプロトコルの送信制御プロトコル/インターネットプロトコル(TCP/IP)の一式を使用するネットワーク及びゲートウェイの世界規模の集合を表している。勿論、ネットワークデータ処理システム100はインターネットに加えて又はその代わりの複数の異なるタイプのネットワークとして構成されることもできる。これらの他のネットワークは例えばイントラネット、構内網(LAN)、広域網(WAN)を含んでいる。図1は異なる実施形態の構造的限定ではなく1例であることを意図されている。
図2を参照すると、データ処理システムの図が有効な実施形態により示されている。データ処理システム200は図1のサーバ104と106及びクライアント110、112、114のようなサーバとクライアントを構成するために使用されることができる。この例示的な例では、データ処理システム200は通信構造202を含んでおり、これはプロセッサ装置204、メモリ206、永続的記憶装置208、通信装置210、入力/出力(I/O)装置212、ディスプレイ214間で通信を行う。
プロセッサ装置204はメモリ206にロードされることのできるソフトウェアの命令を実行するように動作する。プロセッサ装置204は1以上のプロセッサのセットでもよく、特定の構成に応じてマルチプロセッサコアであってもよい。さらに、プロセッサ装置204は主プロセッサが単一のチップ上で二次プロセッサと共に存在する1以上の異種プロセッサシステムを使用して構成される。別の例示的な例として、プロセッサ装置204は同じタイプの多数のプロセッサを含む完全対称型マルチプロセッサシステムであってもよい。
これらの例ではメモリ206は例えばランダムアクセスメモリまたは任意の他の適切な揮発性または不揮発性記憶装置であってもよい。永続的記憶装置208は特定の構造にしたがって種々の形態を取ることができる。例えば永続的記憶装置208は1以上のコンポーネント又は装置を含むことができる。例えば永続的記憶装置208はハードドライブ、フラッシュメモリ、書換可能光ディスク、書換可能磁気テープ、又は幾つかのそれらの組合せであってもよい。永続的記憶装置208により使用される媒体は取外し可能であってもよい。例えば取外し可能なハードドライブは永続的記憶装置208に対して使用されることができる。
通信装置210はこれらの例では他のデータ処理システム又は装置との通信を行う。これらの例では通信装置210はネットワークインターフェースカードである。通信装置210は物理的及び無線通信リンクの一方又は両者の使用により通信を行うことができる。
入力/出力装置212はデータ処理システム200に接続できる他の装置によるデータの入力および出力を可能にする。例えば入力/出力装置212はキーボードおよびマウスを通してユーザ入力の接続を行うことができる。さらに入力/出力装置212は出力をプリンタへ送信できる。ディスプレイ214は情報をユーザへ表示するための機構を提供する。
オペレーティングシステム及びアプリケーション又はプログラムに対する命令は永続的記憶装置208に位置される。これらの命令はプロセッサ装置204により実行するためメモリ206へロードされることができる。異なる実施形態のプロセスはメモリ206のようなメモリに位置されることができるコンピュータ実行命令を使用してプロセッサ装置204により行われることができる。これらの命令はプロセッサ装置204のプロセッサにより読取られ実行されることができるプログラムコード、コンピュータの使用可能なプログラムコード、またはコンピュータの読取り可能なプログラムコードを指している。異なる実施形態のプログラムコードはメモリ206又は永続的記憶装置208のような異なる物理的または有形のコンピュータの読取り可能な媒体で実施されることができる。
プログラムコード216は選択的に取外し可能なコンピュータの読取り可能な媒体218で機能形態で位置され、プロセッサ装置204により実行されるためにデータ処理システム200へロードされるか転送されることができる。プログラムコード216とコンピュータの読取り可能な媒体218はこれらの例ではコンピュータプログラムプロダクト220を形成する。1実施例では、コンピュータの読取り可能な媒体218は永続的記憶装置208の一部であるハードドライブの有効な記憶装置へ転送するための、例えばドライブまたは永続的記憶装置208の一部であるその他の装置へ挿入又は位置付けられる光または磁気ディスクのような実体的形態であってもよい。実体的形態では、コンピュータの読取り可能な媒体218はデータ処理システム200に接続されるハードドライブ、サムドライブ、またはフラッシュメモリのような永続的記憶装置の形態を取ってもよい。コンピュータの読取り可能な媒体218の実体的形態はコンピュータの記録可能な記憶媒体も指している。幾つかの例では、コンピュータの読取り可能な媒体218は取外し可能でなくてもよい。
代わりに、プログラムコード216は通信装置210への通信リンクを通しておよび/または入力/出力装置212への接続を通してコンピュータの読取り可能な媒体218からデータ処理システム200へ転送されることができる。通信リンクおよび/または接続は例示的な例では物理的又は無線であってもよい。コンピュータの読取り可能な媒体はプログラムコードを含む通信リンク又は無線送信のような無形媒体の形態を取ってもよい。
データ処理システム200の示されている異なるコンポーネントは異なる実施形態が実行されることができる方法に対して構造的な限定を与える意図はない。異なる例示的な実施形態はデータ処理システム200について示されているコンポーネントに加えて又はその代わりのコンポーネントを含むデータ処理システムで実行されることができる。図2の他のコンポーネントは示されている例示的な例から変化されることができる。
1例として、データ処理システム200の記憶装置はデータを記憶できる任意のハードウェア装置である、メモリ206、永続的記憶装置208、コンピュータの読取り可能な媒体218は実体的形態の記憶装置の例である。
別の例では、バスシステムは通信構造202を構成するために使用されることができ、システムバス又は入力/出力バスのような1以上のバスからなることができる。勿論、バスシステムはバスシステムに取付けられる異なるコンポーネント又は装置間のデータの転送を行う任意の適切なタイプのアーキテクチャを使用して構成されることができる。さらに、通信装置はモデム又はネットワークアダプタのようなデータの送信及び受信に使用される1以上の装置を含むことができる。さらにメモリは、例えば通信構造202に存在できるインターフェースおよびメモリ制御装置ハブで見られるようなメモリ206又はキャッシュであってもよい。
クライアントとして、データ処理システム200は種々の形態を取ることができる。例えばデータ処理システム200はタブレットコンピュータ、ラップトップコンピュータ、ワークステーション、パーソナルコンピュータ、電話機装置またはパーソナルデジタルアシスタント(PDA)の形態を取ることができる。
異なる実施形態は一連の行為および/または事象を受けたとき人々のグループが個人的および/またはグループとしてどのように反応するかを予測するために使用されることができるシミュレーション環境を与える。このようにして、異なる「何らかの状況を仮定した」シナリオは、グループに対して取られる最終的な行為のセットについて決定を促すために使用されている結果と共にシミュレートされることができる。
異なる実施形態は人間の行動をシミュレートするためのコンピュータ実行方法、装置、コンピュータが使用可能なプログラムコードを提供する。1実施形態では、ソースコードは図1に示されているようにネットワークデータ処理システム100のようなネットワークデータ処理システムの記憶装置中に位置される。ソースコードは人間の行動を予測するために使用される。解釈装置はネットワークデータ処理システムのハードウェアで実行する。この解釈装置は新しい定義を生成するためのソースコード及び解釈されたソースコードによりシミュレーションを実行する。ネットワークデータ処理システムのハードウェアで実行するグラフィカル・ユーザインターフェースプロセッサは解釈されたソースコードを受信し、この解釈されたソースコードを使用して装置依存出力を発生する。装置依存出力はグラフィカル・ユーザインターフェースプロセッサと通信する装置のセットへ送信される。
これらの装置は装置依存出力を表示し、ユーザ入力を受信する。受信されたユーザ入力はグラフィカル・ユーザインターフェースプロセッサへ戻され、これは受信されたユーザ入力を解釈装置へ送信する。解釈装置はソースコードを変化又は変更するために受信されたユーザ入力と新しい定義を使用する。これらの例では、新しい定義は既存のソースコードを変更するかまたは新しい情報を既存のソースコードへ付加するために使用される情報である。このソースコードの変更はその後新しい定義と新しく解釈されたソースコードを発生するために実行される。このようにして、フィードバックループはこれらの有効な実施形態でソースコードを変更するために発生される。
次に図3を参照すると、シミュレーションシステムを示す図が有効な実施形態に従って示されている。システム300は図1のネットワークデータ処理システム100中で構成されることができるシミュレーションシステムの1例である。特に、システム300は図2のデータ処理システム200のような1以上のデータ処理システムを使用して構成されることができる。
これらの例では、定義302は行為304に基づいてシステム300により処理される。行為304は人間の行動のシミュレーションを行うために定義302に適用される。行為304はこれらの例でシステム300のユーザにより選択されることができる。行為304はまた構造ファイルから又はプログラム或いはプロセスによって選択されることもできる。定義302はこれらの例のシミュレーションで使用されるソースコードの一部分である。
システム300は定義306を発生するため行為304を使用して定義302を変更する。これらの示された例では、定義306は定義302で取られる行為304に基づいて結果を与えるために出力として使用される新しい定義である。さらに、定義306は定義302を変更するために使用され、その後、シミュレーションを行い続けるために使用される。異なる反復から学習する能力をシステム300に与えるために連続的なフィードバックが生じる。さらに、先のシミュレーションの結果は定義302に記憶され、システム300が先のシミュレーションから学習することを可能にする。
これらの例では、定義302は人間のグループおよび人間のグループが住む環境を表している。環境の説明は有形及び無形の形態の両者の資産を含んでいる。さらに定義302は異なる人間の記述も含んでおり、それは異なる事象に対する行為及び反応又は人間のグループ及び環境に与えられる入力を規定する内部関係に加えてグループをポピュレートすることができる。
システム300は、ある行為が定義302で記述されている人間のグループに対して取られるときの結果および種々の反応および/または影響を予測するためのシミュレーションツールとして使用されることができる。換言すると、システム300は行為304が定義302に対して与えられるか取られるとき例えば経済、社会、心理のような影響を評価するためにプログラムされることができる。
例示的な例では、定義302はコンピュータ言語を使用して書かれる。示されている例では、コンピュータ言語は解釈された言語であり、これはシミュレーションを実行するために解釈装置を使用するが、実行のためのコンパイルを必要としない。シミュレーションプロセスに含まれる種々のオブジェクトの定義を可能にする任意の言語が使用されることができる。例えばCとC++はこれらの例で使用されることができる解釈された言語の例である。これらの例では、オブジェクトの定義は人間と人間が住む環境を含んでいる。異なる有効な実施形態は定義302と行為304と同様にシステム300のフレームワークを提供する。
図4を参照すると、人間の行動のモデル化とシミュレーション開発フレームワークの図が有効な実施形態により示されている。フレームワーク400は図3のシステム300のアーキテクチャの1例である。この例では、フレームワーク400はソースコード402、解釈装置404、グラフィカル・ユーザインターフェース(GUI)プロセッサ406、装置408を含んでいる。
ソースコード402はデータベースの全ての情報を含んでいるフレームワーク400のモジュールである。シミュレーションについて知られていることは全てこの特定のコンポーネント中に記憶されている。ソースコード402はシミュレーションを実行するのに必要な全ての情報を含んでいる。この情報は例えば人間のグループの定義と、定義を使用してシミュレーションを実行するのに必要なコードを含んでいる。ソースコード402は定義において取られることができる行為と、結果を提示するために使用されるコードも含んでいる。
ソースコード402で使用される言語は人間の行動のシミュレートおよび予測に特定の機能及び特徴を含むように変更されることができる。これらの特徴を有する言語は人間行動定義言語(HBDL)と呼ばれる。HBDLはCまたはC++のような現在利用可能な言語を使用して構成されることができる。勿論、任意の解釈される言語がこれらの例のHBDLを構成するために使用されてもよい。
さらに、HBDLは人間の行動のシミュレートを行うための変形を有する既存の言語を使用するのではなく完全に新しい言語を使用して構成されることができる。例示的な実施形態では、異なる言語がHBDLの異なるコンポーネントを構成するために使用されることができる。これらの例では、ソースコード402はHBDLで書かれたデータベースであり、異なる地理的位置に位置付けられることができる異なる記憶装置にわたって分配されることができる。
解釈装置404はシミュレーションを行うためにソースコード402からデータ410を集める。これらの例示的な例では、データ410は人間のグループ及びそれらの環境と人間に対して適用される行為の定義を含んでいる。さらにデータ410はソースコード402を生成するために使用されるプログラミング言語からのステートメントまたはラインも含む。データ410中のこれらのステートメントはシミュレーションを行うために解釈装置404により使用される。
データ410中のステートメントは例えば合成人間をシミュレートするための人工知能プログラムのコードを含むことができる。これらのステートメントは例えばシミュレートを実行するために使用されるファジー理論、ニューラルネットワーク及びその他のプロセスのためのコードも含むことができる。さらに、データ410はまた結果を提示するためのグラフィカル・ユーザインターフェース(GUI)を生成するためのプロセス又はコードも含むことができる。このようにしてソースコード402は人間のグループと環境に関する情報と、シミュレーションを実行するために必要なプロセス又はコードとの両者を含んでいる。構造に応じて、これらのステートメントはCまたはC++であることができる。代わりにステートメントは解釈装置404が実行のためにCまたはC++に変換するより高いレベルの言語にあってもよい。
このシミュレーションはグラフィックデータ412を生成し、これはGUIプロセッサ406へ送信される。これらの例では、グラフィックデータ412はネットワークを低速化する可能性のある多量のデータ送信を必要としない形態である。例示的な実施形態では、グラフィックデータ412はプリミティブの形態を取る。より多くのデータが転送されることを必要とするビットマップまたは他のフォーマットではなくプリミティブの送信によって、ネットワークで使用される帯域幅の量は減少される。場合によっては、グラフィックデータ412中で幾つかのビットマップを送信することが必要である可能性があるが、プリミティブは可能であるときに使用される。
代わりに、グラフィックデータ412は装置408により表示される装置のデータ414を生成するためにGUIプロセッサ406により処理される。これらの例では、装置データ414は例えば装置408により表示される画素データ又はビットマップであることができる。
装置408はまた装置のデータ416を生成するためにユーザ入力を受信でき、そのデータ416はGUIプロセッサ406により受信される。GUIプロセッサ406は装置データ416を送信のためのネットワークリソースを使用する必要が少ないフォーマットに変換する。これらの例では、ユーザ入力418は解釈装置404へ戻される。ユーザ入力418とデータ410からのシミュレーションからの結果は変更420を生成するために使用される。変更420はソースコード402を重ね書き又は変更するために使用される。これらの変更はソースコード402の定義を変更するために使用される。変更420は図3の定義306に類似であり、これは図3の定義302を変更するために使用される。このようにして、ソースコード402は解釈装置404により行われるシミュレーションの結果と装置408からのユーザ入力を考慮するために変更されることができる。
変更420は例えば解釈装置404により行われているシミュレーションに適用されるかそれに含まれる行為の選択を含んでいる。行為及び変更420のこの選択はこれらの例では装置408で生成されるユーザ入力から受信されることができる。
データ410は図3の定義302と行為304のような情報を含むことができる。変更420は図3の定義306に対する変化のような情報を含むことができる。これらの変化は例えば既存の定義に対する変更または新しい定義の付加であってもよい。グラフィックデータ412はこれらの例では図3の定義306を提示するために使用される。
フレームワーク400の異なるモジュールの説明はこれらのモジュールが構成されることができる方法に対する構造的な限定を意味するものではない。例えば異なるモジュールはフレームワーク400で異なる特徴を実行するための異なるサブモジュール又はプロセスを含むことができる。また、特定のモジュールは単一のデータ処理システムで実行されることができ、または多数のデータ処理システムにわたって分散することもできる。
フレームワーク400のモジュール方式によって、異なるモジュールがハードウェアリソースの使用を最大にするためにネットワークを横切って異なる位置に分配されることができる。フレームワーク400のこのモジュール方式はその他の機能がネットワークデータ処理システム中の遠隔位置に移動されるか分散されることを可能にしながら、幾つかの機能の中央化も可能にする。例えばグラフィック処理と装置依存データを中央化された環境に位置付け、その後、この情報をネットワークによって遠隔装置へ送信することの利点はほとんどない。グラフィックデータは通常サイズが大きく、ネットワークの動作速度を低下させる可能性がある。結果として、このタイプの情報及び処理の中央化は冗長度、データ送信、データ同期に関して問題を生じる。フレームワーク400はこのフレームワーク400の構成がこれらの問題を避けることができるように設計される。
次に図5を参照すると、フレームワーク中でのモジュールの分布を示す図が有効な実施形態により示されている。この例ではシステム500に示されている異なるモジュールは図4のフレームワーク400からのものである。この示されている例で分かるように、システム500はインターネット502、構内網(LAN)504、広域網(WAN)506、構内網(LAN)508を含んでいる。これらの異なるネットワークは図1のネットワーク102中のコンポーネントの1例である。
示されているように、ソースコード510は記憶装置512、514、516中で見られる。記憶装置512は構内網504に接続され、記憶装置514は広域網506に接続され、記憶装置516は構内網508に接続されている。異なるネットワークの異なる装置からのソースコード510の分配はソースコード510が記憶されることができる方法の1例である。
ソースコード510は異なる位置上ではなく特定のネットワーク上の単一の記憶システムに記憶されることもできる。ソースコード510を記憶する幾つかの記憶装置はソースコード510のコピーを複製するパックアップ装置であってもよい。この構成により、特定の位置へ構造を限定するのではなく、これらの位置で発見されることができる利点を活用するために他の位置のシステムの部分を移動することが可能である。
解釈装置518はこの例ではデータ処理システム520に位置される。データ処理システム520は図2のデータ処理システム200のようなデータ処理システムを使用して構成されることができる。データ処理システム520は構内網508に接続される。解釈装置518はシミュレーションを行うために異なるネットワークを横切って異なる記憶装置のソースコード510からデータを集める。
シミュレーションの結果はデータ処理システム520に位置されているGUIプロセッサ522へ送信される。GUIプロセッサ522は装置523上で表示するための装置データを発生する。さらに、解釈装置518はグラフィックデータをデータ処理システム526で実行するGUIプロセッサ524とデータ処理530で実行するGUIプロセッサ528へ送信することができる。GUIプロセッサ524は装置530で表示するための装置データを生成し、GUIプロセッサ528は装置532で表示するための装置データを生成する。GUIプロセッサ522、524、528はそれぞれ装置523、530、532の近くに位置される。
このようにしてこれらのプロセッサにより発生されるデータは大量のネットワークリソースを使用する必要はない。これらの例では、図4のフレームワーク400で示されているGUIプロセッサモジュールは大量のネットワークリソースの速度を低下を許容するか又はそれを使用する方法で、グラフィックデータをネットワークによって遠隔装置への送信の使用を最小にするためにシステム500内の幾つかの異なる位置で複製される。
図6を参照すると、ソースモジュールコードを示す図が有効な実施形態により示されている。この例ではソースコード600は図4のソースコード402をより詳細に示している。
ソースコード600は定義602、行為604、グラフィカル・ユーザインターフェース(GUI)言語606を含んでいる。定義602と行為604は環境中の人間のグループのシミュレーションへ導かれる。GUI言語606は結果を提示し、シミュレーションのエンドユーザからのユーザ入力を受信するために使用される。GUI言語606により、ソースコード600は装置における結果の提示の外見を制御する。この結果の外見はこれらの例ではGUI言語606を使用して制御される。
さらに、ソースコード600はこれらの例では適合性がありオープンである。ソースコード600はシミュレーションのための情報と、シミュレーションを実行又は遂行するために使用される実際の言語の両者を含んでいる。ソースコード600はデータベースを読取って解釈する伝統的なアプリケーションから行う決定を減少する。対照的に、ソースコード600は情報及びアプリケーションがシミュレーションの実行を通して発生された結果に基づいて変更されることができる情報とアプリケーションの両者を含んでいる。
データ608は図4の解釈装置404のような解釈装置へのデータ流を表している。変更610は解釈装置から受信されているソースコード600への変更を提示する。データ608はシミュレーションを行うのに使用するための定義602、行為604、GUI言語606から解釈装置への情報を含んでいる。これらの例では、ソースコード600は自由フォーマットデータベースである。
これらの例示的な例では、ソースコード600はHBDLで書かれている。自由フォーマットデータベースとして、ソースコード600は異なるコンポーネント間にセパレータの連続を必要としない。ソースコード600内のプログラムは単一線を使用して書込まれることができる。ソースコード600はまたシミュレーションの実行を変更するためにループ、ケースステートメント、条件的ジャンプ、その他の類似のステートメントを含んでいる。
さらに、ソースコード600はコードの部分を記憶するオブジェクトを含んでいる。結果として、オブジェクトは反復を必要とせずに何度も呼ばれることができる。さらに、ソースコード600内でオブジェクトはデフォルトパラメータを含むようにインデックスされ規定されることができる。このようにして、インテリジェンスオブジェクトの作成はソースコード600内でエネーブルされる。
また、異なるタイプの変数がソースコード600内で規定されることができる。これらのタイプの変数は特定の作業に導かれることができる。例えば通常の数値タイプに加えて、ソースコード600は人間、人、家族、行為、時刻表、日付、その他のようなタイプを含むことができる。さらにソースコード600はシミュレーションを行うための実行モデルに基づいて時刻表を提供する。人工知能コンポーネントがこれらのコンポーネントをサポートするための機能コマンドと共にソースコード600内で与えられることができる。
ソースコード600内で、定義602は人間のグループおよび人間のグループが生活する環境を記述する。行為604はシミュレーション期間中に定義602に与えられる影響を表している。これらの例では、行為604は時刻表に入れられる事象と呼ばれるコードの部分または断片である。
これらの例では、シミュレーションに参加する人間と、シミュレーションを使用する人間はソースコード600により処理される。シミュレーションに参加する人間は実際のまたは合成の人間であってもよい。定義602、行為604、GUI言語606は機能コードおよびパラメータを含んでいる。機能コード及びパラメータは他の情報と共に解釈装置により解釈されるためのデータ608として出力される。
この情報をソースコード600に移動することによって、ソースコード600はシミュレーションの制御を行うことができる。このようにして、シミュレーションは現在使用されているスタイル及び言語で書かれたものと同様にもはや用途特定ではない。例えば特定のアイテムが定義602で規定されると、このアイテムは行為604の行為の予め規定されたセットにより使用されることができる。例えばタイプXの人間は行為604で行われる行為と共に使用される定義602で規定されることができる。その結果として、無限数のシミュレーションが生成され、人間Xを記録せずに行われることができ、各シミュレーションで行われることができる。
さらに、GUI言語606をソースコード600内に位置させることは定義602と行為604がユーザに提示される表示を制御できることを意味している。このようにして、ソースコード600は基本的にいずれのシミュレーションのユーザが観察するかを担当するデータベースである。この特徴はまた各シミュレーションのためのアプリケーションまたはプログラムのシミュレーションをカスタム書込みする必要なく無限数のシミュレーションが作成されることを可能にする定義及び知識の再使用能力をサポートする。
現在のシステムはスクラッチからコード化される単一のシミュレーションで静的であるデータを使用する。せいぜい、単一のオブジェクトをシミュレートするコードはライブラリに維持されるが、各オブジェクトに対する行為は各シミュレーションで特有である。行為は典型的に別々のプログラム中に書込まれる。結果として、現在使用されている技術は各特定のタイプのシミュレーションに対して実質的なコード化を必要とする。さらに現在のプラクチスでは、グラフィカル・ユーザインターフェースは典型的に再使用され、アプリケーションを制御する。
結果として、これらのインターフェースはアプリケーションを再コード化または書換する必要なく特定のシミュレーションを変更しない。このようにして、有効な実施形態でのソースコード設計では、シミュレーションのための現在使用されている技術と対照的に、結果を表示しユーザ入力を受信するためにより大きなフレキシブル性が与えられる。
GUI言語606は図4のGUIプロセッサ406のようなグラフィカル・ユーザインターフェースプロセッサを通して解釈装置により選択的に送信されるコードを提供する。このコードは種々のディスプレイで与えられる入力及び出力の制御と同様に、エンドユーザへディスプレイまたはビジュアルを与える。GUI言語606はそれぞれのエンドユーザがスクリーン上で観察することおよびそれぞれのエンドユーザがシステムと対話する方法を制御する。これらの例示的な例では、GUI言語606はHBDLのサブセットである。特定の構造に応じて、GUI言語606は異なる有効な特徴を与えるために異なる言語を使用して構成されることができる。このようにして異なる有効な実施形態はソースコード600への制御を示す。
ソースコード600内のGUI言語606により入力及び出力を制御させる利点は、エンド装置で設けられるユーザインターフェースがシミュレーションにより制御されることができることである。シミュレーションはしばしば異なる経歴を有するユーザを含んでいる。種々のユーザをカスタム化する能力により、これらのユーザはシステムを迅速に理解することを助けられる。したがってシミュレーションを実行するための学習曲線は減少される。さらに、最も関連のある情報だけが異なるユーザに提示され、これはシミュレーションの関連性を強化する。
例えば異なるユーザは特定のシミュレーションに対して異なるユーザインターフェースを必要とする可能性がある。あるユーザは定義602に適用するための特定の行為を行為604から選択するためのユーザインターフェースを与えられることができる。他のユーザは定義602に規定されている合成人間の代わりをすることができる。このタイプのユーザには行為を選択するユーザとは異なるユーザインターフェースが与えられる。
さらに、実行されている異なるシミュレーションはまた異なるタイプのインターフェースを必要とする。このタイプのアーキテクチャはダイナミックにユーザインターフェースを付加または簡単にする能力も提供する。このようにして、ユーザインターフェースは構成に依存した方法で設けられることができる。
さらに、異なるシミュレーションは新しいパラメータと新しい環境を要求される。これらの新しく変化する状態は、異なるデータセットが解析されるべきであることを意味する。これらの状態はまた異なるユーザまたは専門家が関与する必要性を含む可能性がある。近い将来におけるこのタイプの変化する作業特性はソースコード600を通して与えられるような多用途の適合性環境の必要性を課す。ソースコード600は定義602、行為604、GUI言語606内にこの模範を与える。
これらの例示的な例では、GUIプロセッサは現在使用されているシミュレーションシステムで現在生じているような静的アプリケーションではなく、ソースコード600の制御下にある。GUI言語606はハードウェアの抽象層を提供する。GUI言語606の内容はシミュレーションプロセスが予測可能な方法で行われ、適切な情報が種々のユーザ及び装置から転送され受信されることを確実にする。GUI言語606は解釈装置およびGUIプロセッサが構成されている任意のハードウェアで作動することを必要とされている全てのコードを含んでいる。このようにして、ハードウェアに変化が生じるとき、ハードウェアをラップアラウンドする低い層の部分だけが書き換えられる必要がある。
これらの例示的な実施例では、GUI言語606は作動時間の期間中にユーザインターフェースの必要なエレメントを構築するための種々の構造物を提供する。これらのエレメントは例えばマウス追跡動作、マウスクリック動作、アナログジョイスティック、ウィンドウ、ダイアローグボックス、チェックボックス、ラジオボタン、リストボックス、形式を含んでいる。これらおよび他のエレメントにより、グラフィカル・ユーザインターフェースの構成はさらに容易にされる。さらに、GUI言語606を使用してグラフィカル・ユーザインターフェースを構築するときに発生される出力は後に使用するためGUI言語606内に保存されることができる。
GUI言語606はソースコード600が人々のグループ及び彼らが住む環境のシミュレーションに関する入力を提示及び受信することを可能にするための複数の異なる特徴を提供する。GUI言語606は3次元のプリミティブのセットを提供する。これらの3次元のプリミティブは仮説的なカメラおよび表示域を制御するためのコマンドのセットのような特徴をサポートする。ベクトル及びマトリックス演算を含めた数学関数も異なるタイプのグラフィックファイルフォーマットを受入および送出する能力と共に含まれる。
GUI言語606内に設けられる特徴は3以上の次元データを埋設する3次元オブジェクトの作成も含んでいる。例えばこれらの3次元オブジェクトは例えば3次元オブジェクトに関する価格、重量、色、価値または規則のようなその他の情報を含むことができる。勿論、任意の種類の情報がこれらの3次元オブジェクトを埋設され、またはそれらに関連付けされることができる。
さらに、GUI言語606は3次元モデル及びスタックと、これらのモデル及びスタックを管理するコマンドのセットも含んでいる。3次元モデル及びスタックは複雑な変換の作成が異なる3次元エンティティに適用されることを可能にする。このようにして、オブジェクトが一次的に影響を受ける異なる世界が作成される。
GUI言語606は大きい3次元データベースの容易な作成とメンテナンスを行う。これらのデータベースは定義602内で見られることができる。データベースはオブジェクトのサイズ、複雑性又は特性にかかわりなく任意の3次元オブジェクトを表すために使用されることができる。
さらに、GUI言語606はグラフィカル・ユーザインターフェース構築言語を提供する。この言語はソースコード600がそれぞれのエンドユーザ装置の外観を制御することを可能にする。GUI言語606は点、線、曲線、表面のような2次元のプリミティブを含むことができる。さらに2次元制御オブジェクトのセットも存在する。これらの2次元制御オブジェクトは例えばウィンドウ、ダイアローグボックス、リクエスタ、チェックボックス、ラジオボタン、メニューを含んでいる。
図7を参照すると、ソースコードの定義部分を示す図が有効な実施形態により示されている。定義700は図6の定義602のより詳細な図である。定義700は資産702、人間704、内部関係706を含んでいる。
資産702は人間が存在する環境中の有形資産708と無形資産710の両者を含んでいる。有形資産708は生物または無生物の両者を含んでいる。生物は例えば家畜、鳥、バクテリア、植物を含むことができる。無生物は例えば家、山、湖、自動車、テーブル、ペン、航空機または銃を含むことができる。
無形資産710は例えばシミュレートされている人間のグループの規則、法律、規制を含むことができる。無形資産710は資産を処理するため解釈装置により使用される情報も含むことができる。この情報は一般的コード、ライブラリ、ルーチンも含んでいる。
特に、このタイプの資産は例えば、数学ライブラリ、グラフィックライブラリ、2次元プリミティブライブラリ、3次元プリミティブライブラリ、モデル及びスタック管理ライブラリ、人工知能ライブラリ、入力/出力ライブラリ、暗号化ライブラリ、ネットワーク化ライブラリ、システム呼ライブラリ、時間管理ライブラリを含んでいる。換言すると、無形資産710はシミュレーションの実行に必要とされる任意の情報を含むことができる。
人間704は人間のグループ中に存在する種々の人間の特徴を示している。人間704は種々の家系および人間のグループ中の人の関係を詳細に示す情報を含むことができる。さらに人間704は種々の個人の心理学的プロフィールを作成するのに必要とされる情報を含んでいる。
内部関係706は、定義700における人工知能によって使用される行為及び反応を含んでいる。これらの行為および反応は種々の方法でトリガーされることができる。例えばトリガーはランダム、警報ベース、状態マシン、または定義700に与えられる事象のセットに対する反応である。
資産702内の異なるオブジェクトは必要な機能及び計算を行うため無形資産710に依存する可能性がある。一般的なコード、ライブラリ、ルーチンは異なるプログラミング作業を指示するために必要とされるコードである。これらの異なるコンポーネントはシミュレーションの実行で使用するため解釈装置へのデータとして送信されることができる。3次元のオブジェクトは生物及び無生物を含めた異なる世界を作る全てのオブジェクトである。
図8を参照すると、オブジェクトのブロック図が有効な実施形態により示されている。この例では、オブジェクト800は図6の定義602内のオブジェクトの1つの例示的な構造例である。この例示的な例では、オブジェクト800は人工知能802、特徴804、内部関係806を示している。
人工知能802は特定のオブジェクトをシミュレートするために使用されるコードを含んでいる。これらの例では、オブジェクト800は人間、植物又は動物のような生物である。人工知能802は選択されたオブジェクトの行為及び反応をシミュレートするのに必要なコードを含んでいる。
特徴804は特定のオブジェクトに対する特徴の識別を含んでいる。例えばオブジェクト802が人間であるならば、特徴804は例えば人の身長、体重、肌の色、髪の色、瞳の色、体格、任意の他の適切な特徴を含むことができる。特徴804は例えば、人の走行可能な速度、人の機敏さ、人のスタミナのような他の身体的特徴を含むことができる。
特徴804の非身体的特徴には限定ではないが、例えば忍耐力、思いやり、情緒、知能、人間関係が含まれている。特徴804はオブジェクト800の行為及び反応をシミュレートするために人工知能802により使用される。特に特徴804は示されている例では人間の行動をシミュレートするために使用される。
人工知能802の複雑性と、特徴804内の特徴の数は特定の構造に応じて変化する。これらのコンポーネントの複雑性はシミュレーションを実際のオブジェクトから弁別できなくする所望の能力が増加するほど増加する。
内部関係806は事象をトリガーするために人工知能802により使用されることができる行為及び反応を含んでいる。これらの事象は例えばオブジェクト800により取られる行為を含んでいる。これらの行為はオブジェクト800により開始されることができるか、或いは行為はオブジェクト800により取られる行為に反応して生じるものである。オブジェクト800により取られるこれらの行為は800がシミュレーション中にある環境に基づいて、オブジェクト800に誘導される行為であるかまたはオブジェクト800により知覚される行為である可能性がある。
図9を参照すると、オブジェクトの図は有効な実施形態により示されている。この例では、オブジェクト900は図6の定義602でシミュレートされることができる無生物の1例である。オブジェクト900は例えば自動車、ペン、航空機、山または湖であってもよい。
オブジェクト900はこの例ではモデル902と特徴904を含んでいる。モデル902は特定のオブジェクトをシミュレートするために使用されるコードを含んでいる。例えばオブジェクト900が自動車であるならば、ある結果を発生する種々の行為が自動車で行われることができる。例えばエンジンがオンに切り換えられ、車輪が回転することができる。
モデル902は例えば数学モデルであってもよい。例えば有限状態のマシンのセットが自動車の機能及び動作をモデル化するために使用されることができる。使用および時間にわたる環境への露出を通してモデル化されているオブジェクトの老化をシミュレートするためのもののような他の機能及びプロセスがモデル902に含まれることができる。
特徴904は例えば、タイヤのサイズ、エンジンのサイズ、塗装色、無線のタイプ、内部スペースの量のような自動車の種々の特徴を識別する。さらに、特徴904はオブジェクト900の自動車の特性についてのその他の情報も含むことができる。例えばタイヤのスレッドの量は特徴904内の特定のタイヤのタイプに対して識別されることができる。
モデル902は特徴904で識別される自動車を運転するユーザ、タイヤで生じた磨耗および裂目のようなオブジェクト900で取られる種々の行為に対する自動車の反応をシミュレートするために使用される。この磨耗および裂目は特徴904内で記録される。磨耗および裂目はモデル902内のアルゴリズムの部分であることができる。さらに太陽および雹のような環境的露出は自動車の例のモデル902における老化した外見を提示するためにモデル902により考慮されることができる。図8のオブジェクト800と図9のオブジェクト900により行われる異なる行為がこれらのオブジェクトで行われることができ、図6の行為604内で規定されることができる。
図10を参照すると、行為オブジェクトの図が有効な実施形態により示されている。この例では、行為オブジェクト1000は図6の行為604内で見られることができる行為の1例である。
行為オブジェクト1000は行為1002、オブジェクト1004、ユーザの許可1006、グラフィカル・ユーザインターフェース(GUI)1008を含んでいる。行為1002は例えば喋る、叩く、動く、座る、握る、話すまたは見るのような行われる行為であることができる。オブジェクト1004は行為が取られることができるオブジェクトの識別である。ユーザの許可1006は特定のユーザがオブジェクト1004において行為1002を行うことができるか否かを決定する。グラフィカル・ユーザインターフェース1008は特定のユーザに提示されるユーザインターフェースのタイプを識別する。
オブジェクト1004は無生物又は生物であってもよい。ユーザの許可1006はあるユーザが選択的な行為をオブジェクトに対して行うことができるか否かを決定するために使用される。幾つかのケースでは、オブジェクトにおいて行為を行うことは特定のユーザには望ましくない。グラフィカル・ユーザインターフェース1008はオブジェクトにおける行為がユーザに提示される方法およびユーザのオブジェクトとの相互動作がいかにして行われることができるかを識別する。
図8、9、10のオブジェクトの例示は図6のソースコード600が現在利用可能なプログラミング言語と方法を使用して実行されることができる1方法を示す目的で与えられている。しかしながら、これらの例は図6のソースコード600が実行されることができる方法についての限定を意味するものではない。
図11を参照すると、行為の適用を示す図が有効な実施形態により示されている。これらの例では、時刻表1100は図6の定義602のような定義がシミュレーション期間中に受ける影響を示している。これらの例示的な例では、図6の行為604のような行為は時刻表1100における事象を指している。これらの行為はコードの断片または部分である。特に、行為は事象1102、事象1104、事象1106、事象1108を含んでいる。この例では、事象1102は時間スロット1110で与えられる。事象1104は時間スロット1112の期間中に生じ、事象1106は時間スロット1114の期間中に与えられる。事象1108は時間スロット1116の期間中に生じる。これらの事象は自然における進行であってもよく、駆動された事象であってもよい。換言すると、事象は解釈装置により発生されたか生成された種々のメッセージに対する応答で与えられることができる。
これらの例では、時刻表1100の実行により発せられたマスター中断は実行半ばでこれらの事象を中断し、必要ならばシミュレーションは直ちにシミュレーションの次の時間スロットへ移行する。ソースコードの実行が進行或いは駆動された事象である現在使用されているプログラム言語とは異なって、ソースコードの行為は有効な実施形態の時間ベースの実行モデルにしたがう。これらの例では、各時間スロットは、一週間、一日、一分間、又は幾つかのその他の時間期間を表すことができる。
示されている実施形態では、時刻表1100は以下により詳細に説明するスケジューラの監視の下で作動する。スケジューラは時刻表1100に関連されるか取付けられている事象1102、1104、1106、1108を動作させる。スケジューラはこれらの事象にわたって十分な制御を有し、必要なときにこれらを中断する。さらに、スケジューラはメモリ管理装置とメモリ回復設備を作動する。このようにして中断された作業について割当てられた全てのメモリは来るべき事象に対して利用可能にされることができる。
図12を参照すると、スケジュールの中断を有する時刻表における行為の適用を示している図が有効な実施形態により示されている。この例では、時刻表1200は事象1202と事象1204を含んでいる。事象1202は時刻表1200の時間スロット1206期間中に実行を開始する。この例では、事象1202は入力1208、決定1210、プロセス1212を含んでいる。事象1202は時間スロット1206期間中に実行を開始する。時間スロット1206が終了したとき、スケジューラは点1214で事象1202の実行を中断する。実行はその後時間スロット1216の事象1204へ転送され、これは時間スロット1206後に開始する。この例では、時間スロット1206と時間スロット1216の間にはオーバーラップは存在しない。
次に図13を参照すると、時間スロットがオーバーラップする事象の適用を示す図が有効な実施形態により示されている。この例では、スケジューラは時刻表1300を実行し、これは種々の時間スロットに取付けられている事象1302、1304、1306、1308を有する。事象1302は時間スロット1310に取付けられている。事象1304は時間スロット1312に取付けられているか関連されている。事象1306と1308は時間スロット1314と1316にそれぞれ取付けられている。
この例示的な例では、異なる時間スロットは相互にオーバーラップすることができる。換言すると、1つの時間スロットは別の時間スロットよりも長時間継続することができる。示されているように、時間スロット1310と時間スロット1312は相互にオーバーラップする。結果として、事象1302と事象1304はある時間期間中に同時に動作でき、時間スロット1310と時間スロット1312はオーバーラップする。この特定の例では、事象1302には実行するための時間がさらに多く与えられる。
時間スロットのオーバーラップはオーバーラップが生じる時間の瞬間中に事象が組み合わさることを意味しない。これらの例示的な例では、任意の理由で時間スロット1310の事象1302の中断が生じたならば、この中断が時間スロット1312の実行の開始前又はその期間中に生じた場合に制御は時間スロット1312へ移行する。しかしながら、中断が時間スロット1310の期間中に生じ、時間スロット1312の終了後に生じたならば、制御は時間スロット1314の事象1306の実行へ移行される。
図14、15、16を参照すると、継続する事象を示す図が有効な実施形態により示されている。示されているように、時刻表1400は事象1402、継続する事象1404、事象1406を含んでおり、これらは時間スロット1408に取付けられているか割当てられている。事象1410は時刻表1400の時間スロット1412に関連されている。事象1414は時間スロット1416へ取付けられ、事象1418は時間スロット1420に取付けられている。事象は中断不能にされるか、或いは延長を与えられることができる。このタイプの事象はエンドユーザから、または依然として終端されていないが必要とされている幾つかの他の事象から来る入力を待機するときに存在する可能性がある。これらの例では、このタイプの事象は継続する事象1404のような継続する事象である。継続する事象1404は1つの時間スロットから別の時間スロットまで事象が十分に生じるまで繰り越されることができる。
図15に示されているように、継続する事象1404は時間スロット1412に取付けられる。図16では、継続する事象1404は再度延長されるか時間スロット1416へ移動される。継続する事象1404はこれらの例ではこの特定の時間スロット期間中に完了される。
図17を参照すると、解釈装置を示す図が有効な実施形態により示されている。解釈装置1700は図4の解釈装置404のより詳細な例示である。解釈装置1700は1つの言語で書かれたソースコードを別の言語で書かれたターゲットコードに変換するプログラムである。解釈装置1700は解釈装置がソースコードの処理を進めるときにターゲットコードを実行する。このターゲット言語は別の高レベルの言語で書かれるか、特定のデータ処理システムまたはプロセッサにより使用される言語で書かれることができる。
正確に解釈され実行される任意のプログラムでは、ソースコードは言語により規定される構造にしたがって構成される。特にこれらの構造は構文構造である。構造の完全なセットはソースコードの言語の文法を形成する。これらの構造にしたがって構成されないか文法的に誤った任意のコードは解釈装置1700により破棄される。
解釈装置1700は通信モジュール1702と言語解釈装置1704を含んでいる。さらに、解釈装置1700は暗号化/解読モジュール1706を含んでおり、これは解釈装置1700と図4のGUIプロセッサ406のようなGUIプロセッサとの間で情報の安全な送受信を行う。
これらの例示的な例では、言語解釈装置1704はHBDL1708を受信する。HBDL1708は図4のソースコード402のようなソースコードモジュールから受信された図4のデータ410のようなデータの1例である。HBDL1708はシミュレーションを実行するため言語解釈装置1704により解釈される。結果は解釈されたHBDL(IHBDL)1710であり、これは暗号化のために暗号化/解読モジュール1706へ送信される。暗号化後、暗号化結果は暗号化され解釈されたHBDL(EIHBDL)1712として図4のGUIプロセッサ406のようなGUIプロセッサへ送信される。EIHBDL1712は図4のグラフィックデータ412の1例である。ユーザ入力は装置のセットからGUIプロセッサにより集められるときの暗号化されたHBDL(EHBDL)1714として受信される。EHBDL1714は図4のユーザ入力418の1例である。この暗号化された情報は解読され、HBDL1716のような通信モジュール1702へ送信される。
HBDL1716はソースコードを変更するために使用されるユーザ入力の1例である。この変更は例えばソースコード内の定義を変化することができ、または定義に適用される行為を選択するためのものである。さらに言語解釈装置1704の出力はソースコードの変更に使用するためHBDL1718として通信モジュール1702へ送信される。HBDL1716とHBDL1718はソースコードの変更に使用されるHBDL1720を形成するために通信モジュール1702により使用される。HBDL1720は図4の変更420のためのフォーマットの1例であり、これはソースコードの変更に使用される。認められるように、HBDL1718はソースコードを変更するために言語解釈装置1704により発生される出力のフィードバックを与える。
特に、通信モジュール1702は表示モジュール1722、入力モジュール1724、登録モジュール1726を含んでいる。言語解釈装置1704は字句解析装置1728、文法構文解析ツール1730、実行モジュール1732を含んでいる。
言語解釈装置1704は字句解析、文法構文解析、決定の実行を処理するモジュールを含んでいる。データがHBDL1708として受信されるとき、字句解析装置1728はHBDL1708中のデータをソースコード言語の個々のトークンまたはワードへ分断する。これらの例示的な例では、ソースコードはHBDLで書かれている。換言すると、字句解析装置1728はHBDL1708中の異なるトークン又はコンポーネントを識別する。これらのトークンはHBDL1708で意味を有する文またはステートメントへトークンをグループ化する文法構文解析ツール1730へ送信される。HBDL1708中で文又はステートメントが構成されると、文法構文解析ツール1730はモジュール1732を実行するためにこのステートメントを送信する。その後、このステートメントに基づく行為がしたがって行われる。
実行モジュール1732はシミュレーションを行うための複数の異なるサブモジュールを含んでいる。これらの例では、実行モジュール1732は解釈されたHBDL(IHBDL)1710とHBDL1718を発生する。HBDL1710はグラフィックプリミティブのようなグラフィックデータの形態を取る。HBDL1718はソースコードの変更に使用される変更された又は新しい定義である。HBDL1718はソースコードの変更又は書換に使用するために入力モジュール1724へ戻される。入力モジュール1724はHBDL1718の新しい定義をディスパチャモジュール1722へ通過し、ここでHBDL1720がソースコードへ書き込まれるようにそれをディスパッチする。
これらの例示的な実施形態では、文法構文解析ツール1730は字句解析装置1728を起動し、モジュール1732を実行する。文法構文解析ツール1730は構文解析装置1728からトークンを要求する。字句解析装置1728はトークンを発生するための特徴をHBDL1708から受信する。トークンが発生される度に、字句解析装置1728はトークンを文法構文解析ツール1730へ送信する。文法構文解析ツール1730はトークンを使用して1以上の解析ツリーを発生する。解析ツリーが完成されたとき、文法構文解析ツール1730は完成された解析ツリーに基づいて実行モジュール1732により行為が実行されるように要求する。
これらの例示的な例では、各解析ツリーは生産を表す。生産はトークン流が生産のための定義に一致する度に起動または実行される1以上の行為のセットを有する。文法構文解析ツール1730からのリクエストに応答して、実行モジュール1732は任意の意味論的誤りが行為の命令で発見されたか否かを決定するために意味解析を行う。誤りが生じたならば、この誤りは報告される。誤りが生じていないならば、行為のセットの命令が実行される。非終端呼者への反復的な帰還はこれまで割当てられ完成された生産について起動された行為により行われる。
これらの例では、実行モジュール1732は文法構文解析ツール1730により作成された解析ツリーで発生された命令が意味論的に正しいか否かを決定する。意味論的誤りが生じたならば、実行モジュール1732は誤りを発生し、これらの例の命令を無視する。しかしながら幾つかのケースでは、修正を行うために十分な情報が実行モジュール1732に与えられるならば、誤りは修正されることができる。
ユーザ入力がEHBDL1714で受信されるとき、暗号化/解読モジュール1706はHBDL1716を形成するために情報を解読する。HBDL1716はHBDLの暗号化されていない形態のユーザ入力であり、これは登録モジュール1726により受信される。登録モジュール1726はユーザ入力を戻す各ユーザを登録し、確認する。この登録モジュールは許可されているか登録されているユーザだけがシステムへの入力の帰還を可能にされることを確実にする。例えば登録モジュール1726は特定のユーザのパスワードを確認できる。
ユーザが確認されると、HBDL1716のユーザ入力は入力モジュール1724へ送られる。入力モジュール1724は全ての形態の入力を中央化し、特定の命令と共に入力をディスパチャモジュール1722へ送信するための焦点として作用する。入力モジュール1724は入力を処理するためディスパチャモジュール1722により必要とされる命令を付加できる。入力はこれらの例ではソースコード中の何を変化するかを規定する。
特定の命令はこれらの例ではソースコードのいずれの部分が特定のユーザにより変更されることができるかに関する命令のような命令を含んでいる。例えばユーザ入力が定義を変更するならば、命令はソースコードのいずれの部分が変更されるべきであるかを述べる。入力により変更されるソースコードの部分は入力を発生するユーザと入力自体との識別を使用して識別されることができる。
その後、HBDL1720がソースコードへ返送されるとき、ディスパチャモジュール1722はソースコードの適切なセクションが書き換えられることを確実にする。ディスパチャモジュール1722はユーザ、入力、書き込まれるソースコードの部分の識別を有するポリシーを使用してソースコードへ書き込むか否かを決定する。ポリシーは入力に応答してソースコードに対して書込みが行われるべきであるか否かを決定するために使用されるルールのセットである。このポリシーは許可されていないユーザが登録モジュール1726を通過する可能性があるケースを防止するために冗長を与える。例えば許可されていないユーザは本物のユーザに成りすまし、入力を与える可能性がある。ポリシーは本物のユーザによりなされたものではないまたは本物のユーザによりなされた入力特性ではない変更として入力を識別できる。この場合、入力はディスパチャモジュール1722により拒否される。
これらの例では、各ユーザはユーザが付加又は変更することができる行為のそれら固有のセットを有する。結果として、ユーザはソースコードの行為セグメントを変更することができるだけである。実行モジュール1732からの出力HBDL1718は定義および行為を書き換えるために使用されることができる。これらの例では、言語解釈装置1704はシステムの別のユーザとも考えられる。しかしながら解釈装置は永久的に認証されているユーザである。ディスパチャモジュール1722はHBDl1718を使用して定義を書き換える等のために、言語解釈装置1704を観察する。
結果として、シミュレーションの任意の所定の点で、実際の人間のエンドユーザはデータベース中の人気の規定された人間を置換できる。このデータ流を通して、解釈装置1700はソースコードを書き換えるか変更することができる。時間が経過し、シミュレーションが行われるとき、定義はソースコードを書き換えるために一定して生成されている。
入力モジュール1724はシミュレーションで実行されている「仮想世界」とシステムと通信する装置でユーザによるユーザ入力を通して受信されている「現実の世界」との接続を行う。ディスパッチャモジュール1722はソースコードを変更するための新しい定義を書き込むための機構を提供する。
次に図18を参照すると、字句解析装置のデータ流を示す図が有効な実施形態により示されている。示されているように、字句解析装置1800はソース1802を受信し、トークン1804を生成するためにソース1802を処理する。字句解析装置1800は図17の字句解析装置1728の1例である。字句解析装置1800は特徴によってソース1802の文字から内容を読取り、ソース1802から来る特徴をトークン1804のようなトークンと呼ばれる基本単位へグループ化する。
ソース1802の文字のトークン1804へのグループ化はこれらの例示的な例では正規表現1806のトークン記述のセットを使用して行われる。正規表現1806はソース1802の文字をトークン1804へグループ化するのに必要な記述を含んでいる。これらの例では、正規表現1806はスクリプトを使用して構成されることができる。これらのスクリプトは文字をトークンへグループ化するのに使用する特徴パターンを記述している言語の符合を使用する。
正規表現1806で規定されている各正規表現には符合が割当てられている。この符合は典型的に数である。字句解析装置1800によりトークン1804で発生されるトークンは正規表現1806中の特定の正規表現の符合を使用して識別される。
正規表現1806に加えて、字句解析装置1800は予約語1808も使用する。トークンがソース1802内で識別されるとき、予約語1808内のワードにも符合が割当てられる。予約語は言語に対して特別な文法的意味を有するワードであり、その言語の識別子として使用されることができない。
図19を参照すると、文法構文解析ツールにより行われる構文パーズまたは構文解析を示す図が有効な実施形態により示されている。図19に示されている構文解析は図17の文法構文解析ツール1730により行われることができる。ツリー1900はトークンをグループ化するため文法構文解析ツールにより使用されることができる解析ツリーの1例である。この例では、ステートメント1902の構文解析が示されている。ステートメント1902はvar1=20である。このステートメントは解釈装置によって実行される行為を管理又は規定するために使用される。
特に、文法構文解析ツールは生産とも呼ばれる構文構造のセットに基づいて字句解析装置により発生されるトークン間の関係を識別する。各生産は論理ユニットを表し、典型的に他の論理ユニット中のトークンに関して規定される。大部分の言語は2つの広いタイプの論理ユニットを規定する。これらの論理ユニットはこれらの例ではステートメントと表現である。表現は通常、値を与える構文言語構造である。ステートメントは変数の状態を変更し、プログラム流を制御し、または言語によりサポートされる他の演算を行う構文構造である。
文法構文解析ツールはトークン流を論理装置へグループ化し、論理ユニットに基づいて行為を実行するように実行モジュールに命令する。この例では、ステートメント1902は字句解析装置により発生されるトークン流を含んでいる。これらのトークンはバーネーム1904、EQ1906、表現1908、NL1910である。表現1908は整数、INT1912を含んでいる。バーネーム1904の値はvar1であり、EQ1906の値は=であり、INT1912の値は20であり、NL1910の値は\nである。認められるように、トークン流では、文法構文解析ツールはストリーム中のトークンのシーケンスに基づいて文法を再生成する。
図20を参照すると、解析ツリーの別の例を示す図が有効な実施形態により示されている。この例では、解析ツリー2000はステートメント2002から生成される。ステートメント2002はこの例では出力=var1+var2*var3である。
この例では、ステートメント2002のトークンはバーネーム2004、EQ2006、バーネーム2008、プラス2010、バーネーム2012、MUL2014、バーネーム2016、NL2018を含んでいる。バーネーム2004は値出力を有し、EQ2006は値=を有し、バーネーム2008は値var1を有し、プラス2010は値+を有し、バーネーム2012は値var2を有し、MUL2014は値*を有し、バーネーム2016は値var3を有し、NL2018は値\nを有する。ステートメント2002の=符合の他方の面上の表現はトークン2008、プラス2010、バーネーム2012、MUL2014、バーネーム2016により規定される。
言語におけるこれらの表現とそれらの使用の識別は識別ノードに関するこれらのトークンの位置を通して解析ツリー2000内で示される。例えば表現2020は表現2022と2026が演算子2024を使用して演算されることを示している。この場合、演算子2024はプラス2010である。表現2020は表現2028と2030を演算子2032を使用して演算されているとして識別する表現2026も含んでいる。この例では、表現2022はバーネーム2008を含み、表現2026は演算子2032を表現2028と2030へ適用した結果を含んでいる。
図21を参照すると、解釈装置の実行モジュールの図が有効な実施形態により示されている。この例では、実行モジュール2100は図17の実行モジュール1732のより詳細な図である。示されているように実行モジュール2100はマスター時刻表制御モジュール2102、数学モジュール2104、物理モジュール2106、人工知能(AI)モジュール2108、報告発生器2110、グラフィックモジュール2112を含んでいる。
マスター時刻表制御モジュール2102は実行モジュール2100内における時間にわたって事象を定義に適用するために使用されるスケジューラである。数学モジュール2104と物理モジュール2106は異なるオブジェクトにおける行為の効果を決定するために必要な計算を行う。人工知能モジュール2108は、マスター時刻表制御モジュール2102によって事象が定義に適用されるとき、人間の行動のシミュレーションを補助するための異なる人工知能コンポーネントのソースコードを作動するために使用されるコンポーネントである。
グラフィックモジュール2112はエンド装置で提示するためGUIプロセッサへ送信されるグラフィックデータを発生する。報告発生器2110はこれらの例では2つのタイプの出力を発生する。1つのタイプの出力はソースコードを変更するために使用される新しい定義である。発生されるこの出力は例えば図17のHBDL1718である。報告発生器2110により発生される他のタイプの出力はグラフィックデータであり、これもこの例ではHBDLでフォーマットされる。この出力は例えば図17のIHBDL1710である。
グラフィックモジュール2112はシミュレーションの結果を表す出力をユーザへ発生するために使用される複数の異なるタイプのプロセスを含んでいる。これらのタイプのプロセスは2次元グラフィックパイプライン、2次元グラフィックプリミティブ、3次元グラフィックパイプライン、3次元グラフィックプリミティブ、2次元及び3次元のモデル及びスタック、ディスプレイリスト発生器、2次元及び3次元のレンダリングエンジンを含んでいる。これら及びその他のタイプのグラフィックプロセスはユーザへ提示するための出力の発生に使用されるグラフィックモジュール2112に存在することができる。
図22を参照すると、トークンを発生するためのプロセスのフローチャートが有効な実施形態により示されている。図22に示されているプロセスは図17の字句解析装置1728のようなソフトウェアコンポーネントで実行されることができる。
プロセスはソースから次の特徴を受信することにより開始する(動作2200)。これらの例では、特徴のソースは図17のHBDL1708である。特徴は待ち行列に配置される(動作2202)。
次に、待ち行列中のストリングと、正規表現または予約ワードとの間に一致が存在するか否かに関する決定が行われる(動作2204)。一致が存在するならば、トークンは待ち行列中のストリングを使用して作成される(動作2206)。待ち行列はその後クリアされる(動作2208)。
その後、ソースにおいてファイルの最後に到達しているか否かの決定が行われる(動作2210)。ファイルの最後に到達しているならば、プロセスは終了する。到達していないならば、プロセスは動作2200へ戻り、次の特徴を得る。ストリングの一致が動作2204で生じないならば、前述したようにプロセスは動作2210へ進む。
図23を参照すると、人間の行動のシミュレーションを実行するプロセスのフローチャートが有効な実施形態により示されている。図23に示されているプロセスは図4のフレームワーク400のようなフレームワークで実行されることができる。特に、このシミュレーションは図6のソースコード600のようなソースコードを使用して実行されることができる。
プロセスはソースコード内の定義で規定されている人間のセットを有する仮想環境をポピュレートすることにより開始する(動作2300)。これらの例では定義は図6の定義602のような定義である。プロセスは人間の行動をシミュレートした結果を形成するためにソースコード内の行為を使用して仮想環境の人間のセットにおいて行為のセットを実行する(動作2302)。これらの例では、行為のセットは図6の行為604のような行為から取られることができる。
その後、フォーマットされた出力を形成するためにソースコードのグラフィカルインターフェース言語を使用して出力が結果から発生される(動作2304)。これらの例では、グラフィカル・ユーザインターフェース言語は図6のGUI言語606であってもよい。その後、シミュレーションが生じたとき、フォーマットされた出力はネットワークデータ処理システム中の装置のセットにおいて提示され(動作2306)、その後プロセスは終了する。
このようにして、異なる有効な実施形態はシミュレーションが生じるとき変化できるソースコードを通して人間の行動をシミュレートする。さらに、グラフィカル・ユーザインターフェース言語は結果がユーザに提示されシミュレーション自体により変更し制御される方法を可能にする。
図24を参照すると、文又は生産を生成するプロセスのフローチャートが有効な実施形態により示されている。図19に示されているプロセスは図17の文法構文解析ツール1730のようなソフトウェアコンポーネントで実行されることができる。
プロセスは処理のための次のトークンを得ることにより開始する(動作2400)。これらの例では、トークンは図17の字句解析装置1728のような字句解析装置から受信される。トークンに関してファイルの最後に遭遇したか否かについての決定が行われる(動作2402)。ファイルの最後に遭遇していないならば、トークンが解析ツリーに適合するか否かの決定が行われる(動作2404)。トークンが解析ツリーに適合しないならば、エラーが発生し(動作2406)、その後処理は動作2400へ戻る。
そうでなければ、トークンが解析ツリーを終了したか否かの決定が行われる(動作2408)。トークンが解析ツリーを終了するならば、終了された解析ツリーに対応する生産のための命令が実行される(動作2410)。その後、プロセスは反復的に呼者へ戻り(動作2412)、プロセスはその後前述したように動作2400へ戻る。
動作2408を再度参照する。解析ツリーが終了しないならば、プロセスもまたさらに動作2400に戻る。動作2402に戻って参照する。ファイルの最後に到達しているならば、文法が部分的に再生成されているか否かが決定される(動作2414)。この動作は不終了のステートメントまたは生産が存在するか否かを決定するために行われる。この決定は不完全な解析ツリーが存在するか否かを知るために解析ツリーを検査することにより行われることができる。文法が部分的に再生成されているならば、エラーが発生し(動作2416)、プロセスはその後終了する。文法が部分的に再生成されていないならば、プロセスはエラーを発生せずに終了する。
図25を参照すると、生産のためのステートメントを実行するプロセスのフローチャートが有効な実施形態により示されている。図25に示されているプロセスは図17のモジュール1732を実行するように、ソフトウェアコンポーネントにおいて実行されることができる。
プロセスは生産のための命令のセットについて意味解析を行うことにより開始する(動作2500)。この動作は生産のための任意の命令において意味的誤りが生じたか否かを決定するために行われる。命令のセットはこれらの例では1以上の命令である。その後、意味的誤りが存在するか否かについての決定が行われる(動作2502)。
意味的誤りが存在しないならば、プロセスは命令のセットを実行し(動作2504)、プロセスはその後終了する。動作2502で、意味的誤りが生じたならば、誤りは報告され(動作2506)、プロセスはその後終了する。幾つかのケースでは、終了ではなく、プロセスは命令の実行を可能にするために誤りの修正を試みることができる。
図26を参照すると、グラフィカル・ユーザインターフェース(GUI)プロセッサを示す図が有効な実施形態により示されている。GUIプロセッサ2600は図4のGUIプロセッサ406のより詳細な例示である。この例では、GUIプロセッサ2600は暗号化/解読モジュール2602、グラフィックモジュール2604、出力モジュール2606、入力モジュール2608、HBDL発生器2610を含んでいる。
これらの例示的な例では、GUIプロセッサ2600は図6のソースコード600のようなソースコードから受信されたステートメントを実行する。特に、ステートメントは図6のソースコード600中のGUI言語606からのものを含んでいる。表示を発生するための実際のコードは別の分離したアプリケーションにあるのではなく、これらのソースにおいて発見される。
GUIプロセッサ2600はステートメントを実行し、ユーザ入力を受信する。GUIプロセッサ2600は図17の解釈装置1700のような解釈装置から暗号化され解釈されたHBDL(EIHBDL)2612を受信する。暗号化/解読モジュール2602は解釈されたHBDL(IHBDL)2614を形成するために情報を解読し、これはグラフィックモジュール2604により処理される。これらの例では、IHBDL2614は装置2618の表示を発生するために使用されることができるプリミティブまたはステートメントのセットを表す。
グラフィックモジュール2604は装置2618で表示するための画素を発生し、そのデータを出力モジュール2606へ送信し、出力モジュール2606は装置2616としてデータを装置2618へ送信する。ユーザ入力は入力モジュール2608により装置2620として装置2618から受信される。このモジュールは装置のデータをHBDL発生器2610へ送信し、これはHBDL2622の形態でこのユーザ入力を表す。HBDL2622はHBDL中に書かれたユーザ入力である。この入力は暗号化/解読モジュール2602により暗号化され、暗号化されたHBDL(EHBDL)2624として解釈装置へ戻される。
これらの例示的な例では、GUIプロセッサ2600は装置2618の近くのハードウェアで実行する。実際に多くのケースでは、GUIプロセッサ2600の一部が実際に装置2618で実行でき、別の部分はサーバのようなデータ処理システム上で実行する。GUIプロセッサ2600はデータを提示することを必要とされるネットワークリソースの使用を減少するように装置2618の近くに位置される。さらに、GUIプロセッサ2600の配置はこれらの例ではデータを表示しユーザ入力を受信することにおける待ち時間を減少するために行われる。
図27を参照すると、グラフィカル・ユーザインターフェース(GUI)プロセッサを通るデータ流を示す図のフローチャートが有効な実施形態により示されている。この例ではグラフィックモジュール2700は図26のグラフィックモジュール2604の1例である。グラフィックモジュール2700はこれらの例では解釈されたHBDLをプリミティブ2702の形態で受信する。これらのプリミティブは解釈装置によるソースコードの解釈の結果である。
グラフィックモジュール2700はビットマップの画素と、ビットマップがどのように操作され又は表示されることができるかを識別するデータを発生するためにこれらのプリミティブを処理する。この情報はビットマップデータ2704としてクライアントプロセス2706へ送信される。これらの例では、クライアントプロセス2706は図19の装置1918のプロセスのような装置で実行するプロセスである。このクライアントプロセスはディスプレイ2708上にビットマップデータを表示するために必要とされる動作を行う。このようにして、表示のための画像をレンダリングするために必要なグラフィック処理はグラフィックモジュール2700により実行される。クライアントプロセス2706は与えられたビットマップデータを表示するだけであり、プリミティブからビットマップグラフィックをレンダリングするために必要とされる異なるプロセスおよび処理電力を必要としない。この処理の分割により、データを表示する装置はワークステーションで使用されるグラフィックのようなグラフィックをレンダリングするために使用される異なるグラフィックプロセッサ及びグラフィックパイプラインを必要としない。
結果として、グラフィックはプリミティブを処理するのに十分な処理電力を通常もたない多数の異なる装置で表示されることができる。例えばクライアントプロセス2706とディスプレイ2708は移動体電話、パーソナルデジタルアシスタントまたはタブレットPC中に構成されることができる。
入力装置2710はディスプレイ2708で表示されているデータに関してユーザ入力を受信する。このユーザ入力はボタンの選択、データの入力又はコマンドの送信のようにグラフィックを操作することができる。ユーザがディスプレイ2708上のビットマップを操作することにより表示された画像を変更するとき、表示されている画像の変更における差異又は変化はクライアントプロセス2706により識別される。これらの画像の差異は差異データ2712を形成し、これはHBDL発生器2714へ戻される。
HBDL発生器2714は図26のHBDL発生器2610に類似している。HBDL発生器2210は情報中のこの変化又はデルタを識別し、これをHBDL2716へ変換して、解釈装置へ送信する。HBDL2716はソースコードモジュールの言語によるステートメント又はコードを含んでおり、ソースコードへ変更を行うために使用されることができる。グラフィックモジュール2700は異なるビットマップのための画素を生成するためにプリミティブ2702を使用する。
図28を参照すると、ディスプレイの操作を示す図が有効な実施形態により示されている。この例示的な例では、ディスプレイ2800は図27のディスプレイ2708で提示されたディスプレイの1例である。ディスプレイ2800はプリミティブから生成されたビットマップを使用して提示される。この例では、ビットマップはスライダ2802とフィールド2804のような異なるコンポーネントを表すために使用される。スライダ2802とフィールド2804を表すために使用されるビットマップデータはこれらのビットマップが操作されることができる態様を示すデータと共に送信される。この例ではスライダ2802は図28の位置2806から、ディスプレイ2800の変更されたバージョンである図29のディスプレイ2902内の位置2900へユーザ入力を通して移動されることができる。さらに、図29のディスプレイ2902に示されているように50のような値がフィールド2804へ入力されることができる。ビットマップ中のこれらの変化は有効な実施形態にしたがってGUIプロセッサへ戻され、これはその後これらの変化に基づいてソースコードの適切なステートメントを発生する。
図30を参照すると、ビットマップの変化を識別するプロセスのフローチャートが有効な実施形態により示されている。図30に示されているプロセスは図27のクライアントプロセス2706のような装置におけるクライアントプロセスで実行されることができるプロセスの1例である。
プロセスはユーザ入力の監視により開始する(動作3000)。ユーザ入力がディスプレイに関して検出されたか否かについての決定が行われる(動作3002)。ユーザ入力が検出されないならば、プロセスは動作3000に戻る。そうでなければ、ユーザ入力が制御を操作するか否かについての決定が行われる(動作3004)。ユーザ入力が制御を操作するならば、制御に対して行われる変化はビットマップで識別される(動作3006)。ビットマップにおけるこの差異又は変化はGUIプロセッサに返送され(動作3008)、プロセスはその後付加的なユーザ入力を監視するために動作3000に戻る。データの変化は特定の実行にしたがって、変化された実際のビットマップであるか又はビットマップの位置の変化の識別である可能性がある。勿論、他のタイプの変化が実施形態に応じて使用されることができる。
再度動作3004を参照する。ユーザ入力が制御の操作ではないならば、ユーザ入力がフィールドへのデータの入力であるか否かの決定が行われる(動作3010)。ユーザ入力がデータの入力ではないならば、プロセスは動作3000に戻る。そうでなければ、プロセスはビットマップで行われた変更を識別するために進行する(動作3006)。
これらの例ではユーザ入力に関して行われる特定の決定は図21の実行モジュール2100のようなディスプレイ中のフィールド及び制御に対する変化を識別するための決定である。関係するビットマップに対する任意のタイプの変化について決定が行われることができる。例えば変化は特定のボタンが選択されているか又は切り換えられているかである可能性がある。
図31を参照すると、差異データを処理するためのプロセスのフローチャートが有効な実施形態により示されている。図31に示されているプロセスは図26のGUIプロセッサ2600のようなGUIプロセッサで実行されることができる。特に、図31に示されているプロセスは図27のHBDL発生器2714で実行されることができる。
プロセスは差異データをクライアントプロセスから受信することにより開始する(動作3100)。これらの例では、差異データはユーザ入力により発生されたビットマップ中の変化を含んでいる。プロセスはその後、差異に基づいてユーザ入力を識別する(動作3102)。このユーザ入力は例えばスライダ位置の変化、データフィールドへのデータの入力、又は幾つかの他のユーザ入力として識別されることができる。動作3102で行われる識別は装置に送信されたもとのビットマップを変化されたビットマップと比較することにより行われることができる。例えばユーザ入力は、差異がこのタイプの制御に沿った上方向のスライダの動作として識別されるならば、人間の時刻表を変更するために行われる。このタイプの差異の1例が実行モジュール2100に関して図21に示されている。
その後、ユーザ入力はソースコードにより使用されるフォーマットに変換される(動作3104)。これらの例では、ユーザ入力はHPDLフォーマットへ変化される。変換されたユーザ入力は解釈装置へ送信され(動作3106)、プロセスはその後終了する。
図32を参照すると、人間の透明模範を与えることにおいて使用するコンポーネントを示す図が有効な実施形態により示されている。この例示的な例では、シミュレーション3200が図4のフレームワーク400のようなフレームワークを使用して実行される。特にシミュレーション3200は図4の解釈装置404のような解釈装置によるソースコードの解釈を通して実行される。
この特定の例では、シミュレーション3200は人工知能(AI)3202を含んでおり、これはシミュレーション3200内に人間を表す。人工知能3202により実行されているこの人間はこれらの例では合成人間である。人工知能3202のコードはシミュレーション3200で使用される他の情報に加えて定義3204から検索される。定義3204は図4のソースコード402のようなソースコードで発見される。定義3204は合成人間とその他の人間、および人間がシミュレーション3200で存在する環境の定義を含んでいる。
結果がシミュレーション3200期間中に生成されるとき、これらの結果はユーザ入力3208として通信モジュール3206へ送信される。これらの通信モジュールもこの例では、図4の解釈装置404のような解釈装置で発見されることができる。通信モジュール3206はシミュレーション3200からユーザ入力3208を取り、変更し、または新しい定義を定義3204へ書き込む。これは変更されたソースコードを形成し、これはその後付加的な結果を生成するためにシミュレーション3200により使用される。人工知能3202はこれらの例の生きたユーザと同じ方法でフレームワークへログされる。
さらに、シミュレーション3200からの結果3210はユーザ3214へ提示するため装置3212へ送信される。これらの例では、ユーザ3214は実際の人間である。
示されている実施形態は人間の透明模範の使用を可能にする。この模範では、定義3204へ再書込みされる人工知能3202により発生されたユーザ入力3208はユーザ3214からの生きた(live)ユーザの入力と置換されることができる。換言すると、ユーザ3214はシミュレーション3200内で人工知能3202を通してシミュレートされた合成人間により生成されるユーザ入力3208の代わりに、新しい定義を変更するか定義3204中に書込むためのユーザ入力3216を通信モジュール3206へ送信することができる。これらの例では、ユーザ3214はユーザ入力3216を与える主題の専門家であってもよい。これらの例では、ユーザ入力3216はシミュレーション3200期間中に与えられる。このユーザ入力は装置3212で受信されて維持される結果に応答したものである可能性がある。
人工知能3202によりシミュレートされる合成人間は合成人間に対する特有の識別子(UI)3218と関連されるユーザ入力3208を発生する。ユーザ入力3208はシミュレーション3200期間中に人工知能3202により発生される。ユーザ入力3216は特有の識別子3218に関連される。ユーザ入力3208は通信モジュール3206へ送信される。通信モジュール3206はユーザ入力3208を使用して、新しい定義を付加するか現在の定義を変更することにより定義3204を変更する。通信モジュール3206は特有の識別子3218に基づいて、変更するための定義3204の部分を知ることができる。
ユーザ3214がユーザ入力3216を発生するとき、ユーザ入力3216は通信モジュール3206により受信される。これらの例示的な例では、ユーザ入力3216は特有の識別子3218を含むこともできる。このようにして、通信モジュール3206は特有の識別子3218に関連される合成人間の定義3204を変更する。
このようにして、ユーザ3214はシミュレーション3200内の人工知能3202を通してシミュレートされる合成人間を置換できる。ユーザ3214は通信モジュール3206へ送信されたリクエストに基づいて、オンザフライで人工知能3202をオン及びオフに切り換える。
ユーザ入力3208をユーザ入力3216で置換することを開始するとき、装置3212のユーザ3214は通信モジュール3206へリクエストを送信する。この点で、ユーザ3214はログオンされており、通信モジュール3206により認証されていると仮定される。通信モジュール3206はユーザ3214が人工知能3202をオン及びオフに切り換える権利を与えられているか否かを決定する。換言すると、通信モジュール3206はユーザ3214が合成人間を置換できるか否かを決定する。ユーザ3214が権利を与えられているならば、通信モジュール3206は人工知能3202の使用を停止するためフラグを設定する。換言すると、人工知能3202の機能はもはやシミュレーション3200内で呼ばれない。
この時点で、ユーザ3214は特有の識別子3218を含むユーザ入力3216を発生する。特定の構造にしたがって、特有の識別子3218はユーザ3214が装置3212でユーザ入力を送信するという認識に基づいて通信モジュール3206により付加されることができる。
図33を参照すると、合成人間を生きた人間と置換するプロセスのフローチャートが有効な実施形態により示されている。この例では、図33に示されているプロセスは図4の解釈装置404のような解釈装置で実行されることができる。特に、プロセスは解釈装置404内の通信モジュールで実行されることができる。
プロセスは合成人間を置換するためのユーザからのリクエストを受信することにより開始する(動作3300)。その後、ユーザがシミュレートされた人間を置換する権利を有するか否かについての決定が行われる(動作3302)。これらの例では、いずれのユーザがシミュレーション期間中に合成人間を置換できるかを規定するリストまたはデータベースに対してユーザを比較することにより決定が行われることができる。例えばあるユーザはある分野の主題専門家であり、これらの特定の分野の合成人間を置換することを可能にされることができる。例えば特定のユーザは政治に関する主題専門家であってもよい。そのユーザはシミュレーションで政治家である合成人間を置換することを可能にされることができる。しかしながらその主題ユーザは、農夫または兵士である合成人間を置換することを可能にされることができず、それはその主題専門家がこれらの領域の知識人ではないからである。
いずれのユーザが合成人間を置換することができるかについての特定の規則は全体的に特定の実装に基づいている。ユーザが合成人間を置換する権利を有するならば、合成人間の人工知能の使用は定義においてオフに切り換えられる(動作3304)。
その後、プロセスはユーザからのユーザ入力を待機する(動作3306)。ユーザ入力が受信されるとき、ユーザ入力が新しい定義を定義に書き込むか否かの決定が行われる(動作3308)。ユーザ入力が新しい定義を書き込むならば、ユーザ入力は新しい定義を書き込むための形態にフォーマットされる(動作3310)。その後、定義はソースコードに書き込まれ(動作3312)、プロセスはその後前述したように動作3306へ戻る。
再度、動作3308を参照すると、ユーザ入力が新しい定義を書き込まないならば、ユーザ入力が人工知能をオン切り換えるか否かの決定が行われる(動作3314)。ユーザ入力は人工知能をオンに切り換えないならば、プロセスは動作3306へ戻る。そうでなければ人工知能は合成人間のシミュレートで使用するために再度オンに切り換えられ、その後プロセスは終了する。動作3316は合成人間をシミュレーションの位置に戻し、シミュレーションから生きた人間を除去する。
再度動作3302を参照すると、ユーザが合成人間の置換を許可されていないならば、エラーメッセージが発生され(動作3318)、プロセスはその後終了する。
フレームワークにより与えられるシミュレーションは人間の行動を間違いなく100%予測することを意図するのではなく、決定又は変更する可能性のある確率を提供することを意図している。シミュレーションからの結果はフレームワークにより行われるシミュレーションなしでは可能ではない案内及び予測を提供する。
異なる有効な実施形態では、ソースコード600は図6の定義602、行為604、GUI言語606の異なる特徴を与えるように特別に設計された言語を使用して構成されることができる。他の有効な実施形態では、図6のソースコード600は他の既存の言語またはプログラミング方法からの機能及び特性を含むこともできる。
異なる有効な実施形態では、人工知能システムは例えば図6の定義602および/または行為604のようなソースコード600の部分を構成することに使用されることができる。幾つかの有効な実施形態では、人工知能はニューラルネットワークの形態(又は人工知能の他の形態)で、種々のオブジェクトをシミュレートするために使用されることができる。例えばニューラルネットワークは人または動物のような生命体または生体をシミュレートするために使用されることができる。
人工知能は例えば形式及び統計解析により特徴付けされる機械学習が使用される通常の人工知能であってもよい。さらに人工知能は例えば計算知能の形態であってもよい。計算知能は反復的開発又は学習を含んでいる。このタイプの人工知能は経験的データに基づいて学習することができる。計算知能の例は例えば限定ではないが、ニューラルネットワーク、ファジー論理、遺伝的アルゴリズムを含んでいる。これらのプログラミング技術は図6のソースコード600内に付加的な特徴を補充又は提供するために使用されることができる。他の有効な実施形態では、図6のソースコード600は種々のプログラミング技術に加えて又はそれと共に既存のプログラミング言語を使用して構成されることができる。
1つの有効な実施形態では、ニューラルネットワークのようなプログラミング技術は図6のソースコード600の部分を構成するために使用されることができる。例えば図6の定義602の一部又は全てはニューラルネットワークを使用して構成されることができる。ニューラルネットワークは生物学的ニューラルネットワークに基づいた数学的な計算的モデルである。ニューラルネットワークは非線形の統計データモデル化プールを提供し、入力と出力間の複雑な関係をモデル化するために使用されることができる。ニューラルネットワークは図6の定義602内の種々のオブジェクトの学習機能を与えるために使用されることができる。
1例では、ニューラルネットワーク技術は、人、動物のような異なるオブジェクト又は図6のソースコード600の定義602内の他の適切なオブジェクトにおける学習特徴を提供するために使用されることができる。このタイプの例では、NNはニューラルネットワーク変数のタイプを示している。宣言の1例は“NN n;”であってもよい。このタイプのステートメントはこの例ではニューラルネットワーク変数を宣言する。Children、n.input、n.output、n.hiddenも生成されることができる。これらの他の変数はニューラルネットワークで入力、出力、隠された層を表している。これらの層はユーザが異なる層へニューロンを付加することを可能にする。これらの異なる層では、入力ニューロンは子供として入力ニューロンネットワーク層へ付加されることができる。
図34を参照すると、ステートメント3400と3402は入力ニューロンの例である。ステートメント3400のセクション3404はニューラルネットワークnの入力ニューロンとして“left operand”を宣言する。この入力要素は入力ニューロンの総数を読取るために使用されることもできる。要素“input”の値は新しい要素が付加される度に1増加される。結果として、入力値は入力ニューロンの総数である。これらのステートメントはC言語を使用して構成されることができるHBDL擬似コードの例である。他の言語は例えばC+および/またはObjective-Cである。
これらの例では、入力ニューロン変数は0値から1値の範囲であることができる。各入力ニューロン変数は最小範囲と最大範囲を有する。これらの範囲はユーザがその範囲内に任意の値を入力することを可能にする。これらの値は特定の実行に基づいて、使用前に正規化されることもできる。
図35を参照すると、ステートメント3500と3502は入力ニューロンの左オペランドで規定された入力範囲の例である。この例では、ステートメント3500は−10の最小値を規定し、ステートメント3502は10の最大値を規定している。
図36を参照すると、入力行動のステートメントの図が有効な実施形態により示されている。ステートメント3600は入力ニューロンが使用される前に入力ニューロンが変更されることを可能にする。換言すると、入力ニューロンはそのニューロンにより入力されたユーザの操作を可能にするためそのニューロンに取付けられているか又は関連されているコードを有することができる。例えばユーザ入力は短くても長くてもよい。この例では、ニューロン入力の行動は0と1の間で評価するために短い及び長いと解釈する。ステートメント3600はこのタイプの行動を入力ニューロンに取付けるために使用されることができるコードの1例である。
次に図37を参照すると、出力宣言を示す図が有効な実施形態により示されている。ステートメント3700は子供を出力ニューラルネットワーク層へ付加するために使用されるステートメントの1例である。
図38を参照すると、ニューラルネットワークの出力範囲のステートメントを示す図が有効な実施形態により示されている。この例では、ステートメント3800と3802は出力ニューロンで設定されることができる範囲の例である。最小及び最大範囲はステートメント3800と3802により設定される。
この特定の例では、出力ニューロンで最小値は−50であり、最大値は50である。さらにユーザは暗黙的な正規化された出力を特定された範囲内の値へ変換できる。例えば1の出力は50に変換されることができ、0.5の出力は0に変換されることができる。さらに出力ニューロンは出力を操作するためにコードに関連されることもできる。
図39を参照すると、出力の行動を変更するためのステートメントを示す図が有効な実施形態により示されている。ステートメント3900は出力ニューロンに関連されることができるコードの1例である。この例では、ニューロンの出力の行動は低及び高に対する0と1の間の値と解釈される。
図40を参照すると、隠れた層のステートメントを示す図が有効な実施形態により示されている。ステートメント4000と4002は任意のニューラルネットワークの隠された層を宣言するために使用されることができるステートメントの例である。隠された層の順序はこれらの例では隠された層の宣言の順序にしたがっている。隠された層の変数の値は特定の隠された層に割当てられたニューロンの数を特定する。ステートメント4000と4002はこれらの例では2つの隠された層を宣言する。ステートメント4000により規定される第1の層は5つのニューロンを含み、ステートメント4002で宣言される第2の層は3つのニューロンを規定する。
図41を参照すると、コード4100はニューラルサンプル値の特定に使用されている1サンプルのニューラルネットワーク要素を示している。異なるサンプルが特定されることができる。各入力及び出力ニューロンはステートメント内に“sample[int]”を含んでいる。ニューラルネットワークが完了されるとき、ユーザはニューラルネットワークを訓練し使用することができる。
図42を参照すると、ニューラルネットワークを訓練するための例示的なステートメントが有効な実施形態により示されている。ステートメント4200、4202、4204はニューラルネットワークの訓練に使用されるステートメントの例である。ステートメント4200はニューラルネットワークが500回訓練されることを示している。ステートメント4202は300回、ステートメント4204は200回の訓練を示している。これらの例では、訓練は記憶されている結果で累積する。これらの異なる結果は特定のオブジェクトに対して図6の定義602又はソースコード602内に記憶されることができる。
図43を参照すると、ニューラルネットワークの計算機能を示す図が有効な実施形態により示されている。この例では、ステートメント4300とステートメント4302は入力ニューロンに機能を行わせて結果を返送させるために使用されるステートメントの1例を提供する。ステートメント4304はこれらの例ではステートメント4300とステートメント4302の代わりの表現である。
図44を参照すると、ニューラルネットワークの1例を示す図が有効な実施形態により示されている。この例では、コード4400はニューラルネットワークを訓練し実行するためのステートメントと共にニューラルネットワークの定義を含んでいる。入力宣言はセクション4402で発見される。入力範囲は4404と4406で発見される。ニューロンに関連されるコードはステートメント4408とステートメント4410で発見される。出力範囲はセクション4412で発見され、出力の行動はステートメント4414で発見される。
隠された層はセクション4416で規定され、機能はステートメント4418で発見される。サンプルはセクション4420で発見されることができ、ステートメント4422は訓練ステートメントの1例である。セクション4424はニューラルネットワークを動作するために使用されるステートメントの例を示している。セクション4424内のステートメント4426は結果を表示する。
図45を参照すると、ニューラルネットワークの動作からの結果を示す図が有効な実施形態にしたがって示される。この例では、ディスプレイ4500は図44のコード4400からのショーステートメント4426に応答して発生されるディスプレイの1例である。
ニューラルネットワークに加えて、ダイナミックリストが図6の定義602内のオブジェクトの種々の属性と特性を管理するために使用されることができる。ダイナミックリストは図8のオブジェクト800の特徴804と図9のオブジェクト900の特徴904のような特徴を規定するために使用されることができる。
例えばダイナミックリストはオブジェクトのコンポーネントの識別、能力、特徴又はその他の適切なパラメータを提供するために使用されることができる。例えば、オブジェクトが自動車であるならば、ダイナミックリストは車輪、エンジン、車体、塗装、送信、窓のようなコンポーネントおよびその他のコンポーネントを識別するために使用されることができる。コンポーネントが自動車に付加されるか除去されるとき、リストはこれらの変更を識別するように変更されることができる。
異なる有効な実施形態では、任意の変数がリストで使用されることができる。ダイナミックリストにより、定義は予測されるコンポーネント又はパラメータに基づいてリストのサイズを予め規定しなければならないという制限を受けない。代わりにリストサイズは種々のパラメータ又はコンポーネントが特定の定義に付加されるか又は除去されるときに変化することができる。
図46を参照すると、リストの例を示す図が有効な実施形態により示されている。この例では、コード4600はステートメント4600でリスト1を規定している。ステートメント4602、4604、4606はリスト1の値を有する3つの変数を識別する。この例では、リスト1はアレイとして作用する。コード4600のステートメント4608はアレイのサイズを識別する値を戻すサイズ機能の1例である。この例では、ステートメント4608は3の値を戻す。
ステートメント4610と4612はコード4600中のリストを検索するために使用されるステートメントの例である。ステートメント4610は真に等しい2の値を戻し、ステートメント4612は誤に等しい0の値を戻す。ステートメント4610と4612におけるこれらの検索機能はリストがある値を含んでいるか否かを決定するために使用されることができる。ある値がリストに存在するならば、リスト中のその値に対するインデックスが戻される。そうでなければ、0の値が戻される。
図47を参照すると、リストから変数を削除する処理を示す図が有効な実施形態により示されている。この例では、コード4700はセクション4702で規定されているようにリストを含んでいる。ステートメント4704はコード4700のリストからアイテムを削除するために使用されることができる削除機能である。ステートメント4704は特定のアイテムがリストに存在するか否かを決定するためにリストを検索する。アイテムが発見されたならば、アイテムはリストから除去される。ステートメント4704は除去されたアイテムを識別するインデックスを戻す。そうでなければステートメント4704は0を戻す。この例では、値25がコード4700のリストに存在せず、0が戻され、何の行為も取られない。この例では、アイテムは値を識別することにより削除される。
図48を参照すると、アイテムを削除するためのコードの図が有効な実施形態により示されている。この例では、コード4800はセクション4802のリストを規定している。ステートメント4804と4806はインデックス値に基づいてリスト中のアイテムを削除するために使用されるステートメントである。ステートメントがリストサイズに満たないインデックス値を識別したならば、アイテムはリストに位置付けられ削除される。機能はその後削除されたアイテムの値を戻す。そうでなければ、アイテムがリストで発見されなかったことを意味する0が戻される。セクション4802に規定されているように、3つのアイテムがリストに存在するので、ステートメント4804は0を戻す。ステートメント4806の結果は20が戻され、ステートメント4808で規定されているアイテムは削除される。
図49を参照すると、リスト中のアイテムを操作するためのコードを示す図が有効な実施形態で示されている。この例では、コード4900はリスト中のアイテムの操作に使用されることができる。これらの例では、コード4900はスタックのリストを使用するためプッシュ・アンド・ポップ機能を含んでいる。ステートメント4902は操作が行われるリストを識別する。この例ではセクション4904はリストに対して行われた3つのプッシュを識別する。ステートメント4906はリストの正面からポップされたアイテムからの値を戻す。
これらのタイプの機能はコンピュータシステムのスタックの操作に使用される機能と類似している。プッシュはリストの上部に特定のアイテムをプッシュするか動かすために使用される。ポップはリストの上部のアイテムの値を戻すために使用される。ポップステートメントが1つの値又はパラメータを含んでいるならば、このステートメントはパラメータの値にしたがってスタックからの値をポップするか戻す。ステートメント4908では、ポップされているアイテムは3のインデックス値を有するアイテムであり、これはこれらの例ではリスト中の第3のアイテムである。
図50を参照すると、待ち行列としてリストの使用を示す図が有効な実施形態により示されている。この例では、コード5000は待ち行列としてリストを走査するために使用されることができるエンキューおよびデキュー機能を示している。ステートメント5002に示されているようなエンキュー機能はアーギュメントをリストの下部に付加する。
ステートメント5004で示されているようなデキュー機能はリストから上部のアイテムを除去し、そのアイテムの値を戻す。この例では、ステートメント5002はアイテムをリスト1に付加し、ステートメント5006は別のアイテムを待ち行列の上部に付加する。ステートメント5002のアイテムは待ち行列の第2に存在する。ステートメント5008はさらに別のアイテムを待ち行列に付加し、他のアイテムを待ち行列の下位置へ押しやる。
図51を参照すると、リスト中のアイテムの読取りを示す図が有効な実施形態により示されている。この例では、コード5100はセクション5102に規定されているようにリストの上部と下部からのアイテムの読取りを示している。ステートメント5104はリストの上部に位置するアイテムを読取り、ステートメント5106はリストの下部に含まれているアイテムを読取る。
図52を参照すると、リスト中の分類属性が有効な実施形態により示されている。コード5200はリストの分類ステータスを識別するために使用されるステートメントを含んでいる。ステートメント5202は分類ステータスがそのリストのために設定されているか否かを識別する。ステートメント5202が正に等しく設定されるならば、アイテムはそれらの値に従ってリストに挿入される。ステートメント5204は分類順序を識別する。
ステートメント5204が真に等しく設定されるならば、リストは最小から最大へ降順に分類される。この例では、ステートメント5204は誤に等しく設定される。結果として、アイテムはセクション5206に示されているように降順でリストに付加される。さらに付加的なステートメントが種々の順序でリストを分類するために使用されることができる。
図6のソースコード600を構成するために使用されることができるプログラミング技術の別の例はファジー論理である。ファジー論理を構成するために使用される言語の1例はプロローグであり、これはファジー論理および人工知能プログラミングのために使用されることができる論理プログラミング言語である。
示された例では、ファジー論理システムが論理的ステートメントに基づくことができ、ここではオペランドは幾つかのセットから取られた項である。1例では、セットは例えば燃料、距離、速度であることができる。燃料は3つの項、即ち低、中、高を含むことができる。距離は近および遠であることができる。速度はこれらの例では低、中、高であることができる。これらのセットは燃料が低であるか距離が近いならば、速度が低であるような規則を提供するために使用されることができる。別の規則は燃料が中であり、距離が遠であるならば、速度は中である。第3の規則は燃料が高であり、距離が遠であるならば、速度が高である。ファジー論理により、セットの異なる要素について範囲が設定されることができる。これらの範囲は最小及び最大の範囲を含んでいる。
図53を参照すると、燃料、距離、速度を使用するファジー論理の構成の1例が有効な実施形態により示されている。この例では、コード5300はセクション5302でこれらのセットを規定する。燃料は整数であり、距離と速度が浮動変数である。セクション5304は燃料の最小及び最大の範囲を0と100の間にあるとして識別する。
燃料の開始及び終了項はセクション5306で規定される。このセクションはファジーセットの左及び右エッジを識別する。セクション5308、5310、5312は燃料に対する項を識別する。セクション5308は台形項を識別し、セクション5310は三角形項を識別し、セクション5312は釣鐘曲線項を識別する。
距離についての類似の定義がセクション5314で発見される。ファジー論理の規則はこの例ではセクション5316で規定されている。セクション5318は燃料と距離の初期値を識別する。ステートメント5320は速度の計算に使用される。
図6のソースコード600内の種々のオブジェクトをシミュレートするために使用されることができる別のタイプのプログラミング技術は進化的計算を含んでいる。進化的計算は人工知能の1タイプである。1つの特別な方法又は方法論は遺伝的アルゴリズムである。このアルゴリズムは解を識別するために使用される検索技術である。このタイプの技術はグローバルサーチ発見タイプの技術と考えられる。遺伝的アルゴリズムにより、遺伝子が染色体と同様に宣言される。適合度関数、選択プロセス、組み変え機能もこのタイプの技術を使用して特定される。
図54を参照すると、遺伝的アルゴリズムを使用する式の解を示す図が有効な実施形態により示されている。この例では、コード5400は式2X+3Y=20を解くために使用される。
この例では、2つの遺伝子がセクション5402で開始される。これらの2つの遺伝子は変数XとYに対応する。染色体はセクション5404の遺伝子に付加される。適合度関数のコードはステートメント5406で識別されることができる。選択関数のコードはステートメント5408を使用して特定されることができる。組み変え機能のコードはステートメント5410で特定されることができる。
これらの機能に対するコードは特定のステートメントにおける任意の有効な機能を使用して構成されることができる。これらの選択プロセスはコードにより特定される最も適切であるかまたは最良適合の染色体を選択するために使用される。例えばルーレットのホイール選択プロセスが使用されてもよい。ステートメント5410の組み変え機能に関しては、このステートメントは染色体の新世代を構築するためコードを識別するために使用されることができる。
1つの例では、二進変数のクロスオーバー法が使用されてもよい。ステートメント5412はプロセスの許容誤差を特定し、ステートメント5414はコード5400で進化機能を呼び出す。ステートメント5414で識別される進化プロセスはこの例では、最適合染色体の許容誤差がステートメント5412で特定される誤差よりも小さいときはいつでも停止する。コード5400で規定されるようにプロセスを実行することにより、遺伝子Xは染色体に最も適合するX値を戻し、遺伝子Yは染色体に最も適合するY値を戻す。
図55Aと55Bを参照すると、ソースコード中のオブジェクトのコードを示す図が有効な実施形態により示されている。この例では、コード5500は森の形態のオブジェクトの定義の1例である。セクション5502は森中の木の色を識別する。コード5500中のセクション5504は森のグリッドを識別する。セクション5506は森のグリッドに存在できる木を規定する。セクション5508は森中の木の行を識別する。セクション5510はセクション5508で規定されたような木の1以上の行を含む木の区画を生成するために使用される。セクション5512は森を存在するために使用されることができるコードの1例である。これらの例では、ライン5514と5516は森中にランダムさを与えるために使用される変換ステートメントである。例えば回転および/またはスケールステートメントのような他のステートメントもこれらのステートメントに加えて又はその代わりに使用されることができる。
これらの例では、コード5500はC言語を使用して書かれる。勿論、任意の言語が森の定義を生成するために使用されることができる。さらに、森のプレゼンテーションは図6のソースコード600の定義602で発見されることができる。勿論、コードは特定の実装に基づいて任意の言語を使用してまたは任意のオブジェクトで生成されることができる。
異なる示された実施形態のフローチャートとブロック図は装置、方法、コンピュータプログラムプロダクトの幾つかの可能な構成のアーキテクチャ、機能、動作を示している。これに関して、フローチャート又はブロック図の各ブロックはコンピュータの使用可能又は読取り可能なプログラムコードのモジュール、セグメント又は部分を表すことができ、これは特定された1又は複数の機能を行うための1以上の実行可能な命令を含んでいる。幾つかの別の構成では、ブロックに注記されている1又は複数の機能は図面で注記されている順序以外の順で行われることができる。例えば幾つかのケースでは、連続して示されている2つのブロックは含まれている機能にしたがって、実質的に同時に行われるか、またはブロックは時には反対の順序で行われることができる。
異なる有効な実施形態は全体的にハードウェアの実施形態、全体的にソフトウェアの実施形態またはハードウェアとソフトウェア素子の両者を含んでいる1実施形態の形態を取ることができる。幾つかの実施形態はソフトウェアで構成され、これは例えばファームウェア、常駐ソフトウェア、マイクロコードを含んでいるが、その形態に限定されない。
さらに、異なる実施形態は命令を実行するコンピュータまたは任意の装置或いはシステムにより又はそれらと共に使用するためのプログラムコードを提供するコンピュータが使用可能な又はコンピュータが読取り可能な媒体からアクセス可能なコンピュータプログラムプロダクトの形態を取ることができる。この説明の目的では、コンピュータが使用可能な又はコンピュータが読取り可能な媒体は通常、命令実行システム、装置またはデバイスにより又はそれらと共に使用するためのプログラムを含み、それを記憶し、通信し、伝播し、または転送することができる任意の有形の装置であってもよい。
コンピュータが使用可能又は読取り可能な媒体は、電子、磁気、光学、電磁、赤外線、または半導体システム或いは伝播媒体であることができるが、それに限定されない。限定ではないコンピュータの読取り可能な媒体の例は半導体または固体状態メモリ、磁気テープ、取り出し可能なコンピュータディスケット、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、剛性な磁気ディスク、光ディスクを含んでいる。光ディスクはコンパクトディスク−読取り専用メモリ(CD−ROM)、コンパクトディスク−読取り/書き込み(CD−R/W)及びDVDを含むことができる。これらの例では、物理的または有形のコンピュータが読取り可能な媒体は記録可能なコンピュータ記憶媒体と呼ばれる。
さらに、コンピュータが使用可能な又はコンピュータが読取り可能な媒体はコンピュータが読取り可能又は使用可能なプログラムコードを含み又は記憶することができ、それによってコンピュータが読取り可能な又はコンピュータが使用可能なプログラムコードがコンピュータで実行されるとき、このコンピュータが読取り可能なまたは使用可能なプログラムコードの実行によってコンピュータは別のコンピュータが読取り可能又は使用可能なプログラムコードを通信リンクによって送信する。この通信リンクは限定ではない例えば物理的又は無線の媒体を使用することができる。
コンピュータが読取り可能又はコンピュータが使用可能なプログラムコードを記憶および/または実行するのに適したデータ処理システムはシステムバスのような通信構造を通してメモリ素子へ直接的又は間接的に結合される1以上のプロセッサを含む。メモリ素子はプログラムコードの実際の実行期間に使用されるローカルメモリと、大容量記憶装置と、コードの実行期間中に大容量記憶装置からコードが検索される回数を減少するため少なくとも幾つかのコンピュータが読取り可能又はコンピュータが使用可能なプログラムコードの一時的な記憶を行うキャッシュメモリを含むことができる。
入力/出力又はI/O装置は直接的に又は介在するI/O制御装置を通してシステムに結合されることができる。これらの装置は例えば限定ではないが、キーボード、タッチスクリーンディスプレイ、位置指示装置を含むことができる。異なる通信アダプタもデータ処理システムが介在する私的又は公共のネットワークを通して、他のデータ処理システムまたは遠隔プリンタ又は記憶装置へ結合できるようにシステムに結合されることができる。限定ではない例はモデムであり、ネットワークアダプタは現在利用可能なタイプの通信アダプタの単なる数例である。
本発明の開示の説明は例示及び説明の目的で行われ、開示した形態の説明と完全に同じであるかそれに限定する意図はない。多くの変更及び変形は当業者に明白であろう。さらに、異なる有効な実施形態は他の有効な実施形態と比較して異なる利点を与えることができる。本発明の原理、実際的応用を最良に説明するため、および当業者が考慮される特定の使用に適するように種々の変形と共に種々の実施形態の説明を理解できるように1または複数の実施形態を選択し説明した。