RoboCup2DSimulationの試合を繰り返させるためのバッチ処理、のための試合実行スクリプト


河原林研究室>>ワンマン的日記>>自動実行/スケジューリング>> RoboCup2DSimulationの試合を繰り返させるためのバッチ処理、のための試合実行スクリプト

RoboCup2DSimulationの試合を繰り返させるためのバッチ処理、のための試合実行スクリプト

概要

実験自動化のためのスクリプト(初期バージョン)

次のようなスケジュールで試合を自動で行いたい。

	試合 teamA vs teamB
	試合 teamA vs teamC
	試合 teamB vs teamC

rcssserverの起動オプションを変更することによって、 試合終了後にプロセスを落とすことができる。

そこで、 1試合を1スクリプトの実行とみなして、 試合終了後に、次の試合のためのスクリプトを起動することを考える。

しかし、サーバーの起動後にクライアントを起動する必要があるため、 サーバーは、バックグラウンドジョブとして起動する。

そこで、サーバーのプロセス終了をスクリプトの終了とするために、 プロセスを監視しておく必要がある。

以下のスクリプトでは、プロセスが生きているか5秒ごとに確認するためのループを回して実現している。

。。。

試合実行スクリプト(初期バージョン)

この方法は、いい方法ではないだろう。
ジョブ制御用の便利なコマンドがあるので、それらを使えばもっと簡単に実現することができる。

	#! /bin/sh
	
	if [ $# = 2 ] 
	then
		TEAM_A=$1
		TEAM_B=$2
	fi
	
	DATE=`date +%y%m%d%H%M`
	LOG_DIR=log/$DATE
	
	mkdir $LOG_DIR 
	echo "logging @ $LOG_DIR"
	
	# server starting
	./start_exp_server.sh $LOG_DIR &
	process_id=$!
	echo $process_id
	
	sleep 2
	
	
	# start B team
	./start_team.sh $TEAM_A > $LOG_DIR/$TEAM_A
	
	# start A team
	./start_team.sh $TEAM_B > $LOG_DIR/$TEAM_B
	
	flag=1
	while [ $flag = 1 ] 
	do
	
		sleep 5
	
		result=`skill -n $process_id`
	
		if [ "t$result" = "t" ] 
		then
			flag=0
		fi
	
	done
	
	echo "done"

ジョブの制御

cf. waitコマンド