実行プラットホーム(AgentPlatform.py)

【最もプリミティブ(原始的)なエージェントの実装】
Agentを移送する 通信方式のモデル
( ①分配方式 )の実装

Agentを移送する通信方式のモデル(①分配方式)

Pythonをベースにしたエージェントの開発・実行プラットホーム

Pythonをベースにした通信方式のモデル(①分配方式)の実装方法

プログラミング演習素材:ファミリーレストランのオブジェクトモデル

Pythonをベースにしたエージェントの開発・実行プラットホーム
への、ファミリーレストランのオブジェクトモデルの実装

Pythonをベースにした通信方式のモデル(①分配方式)
への、ファミリーレストランのオブジェクトモデルの実装

エージェントの実行タスク(client_task.py)

エージェントの指令クライアント(client.py)

エージェントの実行プラットホーム(AgentPlatform.py)
【最もプリミティブ(原始的)なエージェントの実装】
Agentを移送する通信方式のモデル ①分配方式
create
dispose
(廃棄) dispatch
(発送)
Server
dispose
(廃棄)
・外部状態の把握
・状態モデルとの照合
・メソッドの実行
clone
Client
dispatch
(発送)
Server
dispose
(廃棄)
・外部状態の把握
・状態モデルとの照合
・メソッドの実行
【最もプリミティブ(原始的)なエージェントの実装】
Pythonをベースにしたエージェントの開発・実行プラットホーム
エージェントの実行タスクは、
Pythonのスレッドとして活性
化・走行
エージェントの実行タスクは、
Pythonのモジュールとして実現
エージェント
エージェント
エージェントの
実 行 タ ス ク
(client_task.py)
エージェント
エージェント
エージェントの指令
ク ラ イ ア ン ト
( c l i e n t .py)
エ ー ジ ェ ン ト の
実行プラットホーム
(AgentPlatform.py)
ランタイムシステム
ランタイムシステム
Python仮想機械
Python仮想機械
ハードウェア
コンピュータA
エージェント
ハードウェア
移動
エージェントは、 xmlrpcを介して通信上のデータ
に収納されたPythonモジュールとして移動
コンピュータB
ネットワーク
【最もプリミティブ(原始的)なエージェントの実装】
Pythonをベースにした通信方式のモデル(①分配方式)の実装
create
dispose
(廃棄) dispatch
(発送)
Server
dispose
(廃棄)
・外部状態の把握
・状態モデルとの照合
・メソッドの実行
clone
Client
dispatch
(発送)
Server
dispose
(廃棄)
・外部状態の把握
・状態モデルとの照合
・メソッドの実行
【最もプリミティブ(原始的)なエージェントの実装】
プログラミング演習素材:ファミリーレストランのオブジェクトモデル
食材配送
店長
ウエイトレス
料理人
冷蔵室
厨房
カ
ウ
ン
タ
|
料理
メニュー
料金
食材
禁煙席
たばこ自動販売機
トイレ
喫煙席
レジ
待合室
客
【最もプリミティブ(原始的)なエージェントの実装】
Pythonをベースにしたエージェントの開発・実行プラットホーム
へ の 、 フ ァ ミ リ ー レ ス ト ラ ン の オ フ ゙ シ ゙ ェ ク ト モ テ ゙ ル の 実 装
エージェントの実行タスクは、Python
のスレッドとして活性化・走行
エージェントの実行タスクは、Python
のモジュールとして実現
エージェントの
実 行 タ ス ク
(client_task.py)
店長
料理人
冷蔵室
客
エージェント
厨房
エージェント
エージェント
トイレ
客
ウエイトレス
料理
メニュー
料金
食材
カ
ウ
ン
タ
|
禁煙席
エージェント
たばこ自動販売機
喫煙席
レジ
エ ー ジ ェ ン ト の
実行プラットホーム
( Age nt Pl atfor m.p y)
エージェントの指令
ク ラ イ ア ン ト
(client.py)
ランタイムシステム
Python仮想機械
ランタイムシステム
客
エージェント
ハードウェア
コンピュータA
待合室
Python仮想機械
ハードウェア
移動
エージェントは、 xmlrpcを介して通信上のデータに収納
さ れ た P y t h o n モ ジ ュ ー ル と し て 移 動
コンピュータB
ネットワーク
【最もプリミティブ(原始的)なエージェントの実装】
P y t h o n を ベ ー ス に し た 通 信 方 式 の モ デ ル ( ① 分 配 方 式 )
へ の 、 フ ァ ミ リ ー レ ス ト ラ ン の オ フ ゙ シ ゙ ェ ク ト モ テ ゙ ル の 実 装
店長 料理人
冷蔵室
厨房
create
dispose
(廃棄) dispatch
(発送)
料理
メニュー
料金
ウエイトレス 食材
カ
ウ
禁煙席
ン
タ
|
たばこ自動販売機
dispose
(廃棄)
喫煙席
待合室
レジ
・外部状態の把握
・状態モデルとの照合
・メソッドの実行
トイレ
Server
clone
Client
店長 料理人
dispatch
(発送)
冷蔵室
厨房
dispose
(廃棄)
待合室
レジ
・外部状態の把握
・状態モデルとの照合
・メソッドの実行
トイレ
喫煙席
Server
料理
メニュー
料金
ウエイトレス 食材
カ
ウ
禁煙席
ン
タ
|
たばこ自動販売機
【最もプリミティブ(原始的)なエージェントの実装】
エージェントの実行タスク(client_task.py)
エージェントの実行タスクは、Pythonのモジュールとして実現
エージェントの
実 行 タ ス ク
(client_task.py)
def main(name, arg):
n = arg
while 1:
print 'Hello from thread', name, n
time.sleep(3)
n -= 1
【最もプリミティブ(原始的)なエージェントの実装】
エージェントの指令クライアント(client.py)
x m l r p c を 介 し た エ ー ジ ェ ン ト の 実 行 制 御 プ ロ ト コ ル
エージェントの指令
ク ラ イ ア ン ト
( c l i e n t .py)
main():
workbench = "http://localhost:7070"
s = xmlrpclib.ServerProxy(workbench)
f = open('client_task.py')
task = f.read()
f.close()
name = 'agent_a'
arg = 100
s.spawn_agent(task, name, arg)
s.kill_agent(name)
【最もプリミティブ(原始的)なエージェントの実装】
エージェントの実行プラットホーム(AgentPlatform.py)
エージェントの実行タスクは、Pythonのスレッドとして活性化・走行
class AgentPlatform:
def spawn_agent(self, task, name, arg):
try:
rv = spawn_agent_task(task, name, arg)
except: return '***'
return rv
def kill_agent(self, name):
try:
rv = kill_agent_task(name)
print 'rv:', rv
except:
traceback.print_exc()
rv = '***'
return rv
if __name__ == "__main__":
s = SimpleXMLRPCServer(("localhost", 7070))
print s
thread.start_new(agent_watcher, ())
エ ー ジ ェ ン ト の
s.register_instance(AgentPlatform())
実行プラットホーム
s.serve_forever()
(AgentPlatform.py)
【最もプリミティブ(原始的)なエージェントの実装】
エージェントの実行プラットホーム(AgentPlatform.py)
エージェントの実行タスクは、Pythonのスレッドとして活性化・走行
def spawn_agent_task(task, name, arg):
try:
f = open('log/' + name + '.py', 'w')
f.write(task)
f.close()
m = mloader.load('log. ' + name)
fun = getattr(m, 'main', None)
tid = KThread.KThread(target=fun, args=(name, arg))
except: return '***'
agent_pool[name] = {'task': task, 'arg': arg, 'tid': tid}
return tid
エ ー ジ ェ ン ト の
実行プラットホーム
(AgentPlatform.py)
【最もプリミティブ(原始的)なエージェントの実装】
エージェントの実行プラットホーム(AgentPlatform.py)
エージェントの実行タスクは、Pythonのスレッドとして活性化・走行
def kill_agent_task(name):
try:
tid = agent_pool[name]['tid']
tid.kill()
del agent_pool[name]
except: return '***'
return tid
エ ー ジ ェ ン ト の
実行プラットホーム
(AgentPlatform.py)
【最もプリミティブ(原始的)なエージェントの実装】
エージェントの実行プラットホーム(AgentPlatform.py)
エージェントの実行タスクは、Pythonのスレッドとして活性化・走行
def agent_watcher():
print 'Start agent_watcher'
while 1:
time.sleep(1)
エ ー ジ ェ ン ト の
実行プラットホーム
(AgentPlatform.py)