[Rumble-jp-dev] GetLeagueFinalResultのオプティマイズ

Back to archive index

KOJIMA Hiroyoshi kojim****@robok*****
2003年 6月 11日 (水) 10:15:43 JST


小島です。
ロボットが500台あることなんか
ちっとも考えていませんでした。
結果出てくるのおそいですよねぇ

それでは、GetLeagueFinalResult.doの説明させていただきます。
この関数の目的は、リーグで行われたシーズン後半の平均生存率を各ロボットごとに求め、
さらに順位をつけることです。

●主なクラスの
/rumble-jp/java/rumblejp/web/actions/GetLeagueFinalResultAction.java
内での処理を説明して行きます。

〇 howManySeasons(int x)
//何回分のシーズンの平均を取るかを返すメソッド

〇 getRobotsInRange2(LeagueManager manager,LeagueFinalResultForm form)  
//特定リーグ特定シーズンの情報をSeasonRobot[]で返す。 GetSeasonResultから借り物
 
〇class LeagueFinalResultComparator
//robots_leagueId_seasonIdを生存率の平均を降順に並べ変えます。

〇 doProcess()
//メインとなる関数。
----------------------------------------------------------- 
SeasonRobot[] robots_leagueId_seasonId = getRobotsInRange2(manager,form);
//特定リーグ特定シーズンの情報
int totalRobots=robots_leagueId_seasonId.length;
//特定リーグ特定シーズンの情報のロボットの数。
int howManyTimes=howManySeasons(form.getSeason());
//何回分のシーズンの平均を取るか?

for(int i=0;i<totalRobots;i++){
//ロボットの数だけ生存率の平均を計算するループ。
	 :
	 :
	SeasonRobot robot = robots_leagueId_seasonId[i];
	//robots_leagueId_seasonId[]の中の一台のロボット。

	SeasonRobot[] robots_leagueId_robotId =
manager.getLeagueRobot(form.getLeagueId(),robot.getRobotId());
	//特定リーグ特定ロボットの情報を得る。
 	:
 	:
	int totalSeasons=robots_leagueId_robotId.length;
	//全体で今までに行われたシーズン数。
	for(int n=totalSeasons-1;n>=0;n--){
	//robotについて平均生存率を求めるループ  
		  :
	  	  :
	  	  :
	   	  robot.setAv_Rank(av_Rank);
	      //もとまった平均生存率(av_Rank)を
          //robots_leagueId_seasonIdに保存する。  
		  }
	  :
	  }
:
java.util.Arrays.sort(robots_leagueId_seasonId,new 
                 LeagueFinalResultComparator());
//生存率の高い順にソートする。。
:
form.setRobots(robots_leagueId_seasonId);
//formにセットする。
----------------------------------------------------------------------
GetLeagueFinalResultAction.javaについて以上です。
長いなあ。読みづらくて申し訳ない。

●league_final_result.jspについて

<%int Rank_Num=1;%>
で順位を整数で表します。

<logic:iterate id="robot" name="leagueFinalResultForm" 
property="robots" type="rumblejp.common.beans.SeasonRobot">
でGetLeagueFinalResultAction.javaで求めたrobots_leagueId_seasonId
を表示します。

以上説明おしまいです。

シーズンが終わったら、そのたびに
平均の生存率を求めてデータベースに記録しておけば早いのでは?
と思って、ちょっと前からデータベースに記録するためのプログラム書いてます。
アゲイン開始には間に合わなくて残念でしたが…

> 黒澤です。
> 
> GetLeagueFinalResultも見てみました。
> これはかなり改善の余地がありますね。
> ロボット台数分のEJB呼び出しをしているので、
> これだけでかなりのオーバーヘッドになります。
> 
> SQL書き方Tipsを作りながら直し方を検討してみようと思います。
> まずはどういう処理をしているのかを読んでいくので、
> 小島さん補足お願いします。
> 




Rumble-jp-dev メーリングリストの案内
Back to archive index