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を作りながら直し方を検討してみようと思います。 > まずはどういう処理をしているのかを読んでいくので、 > 小島さん補足お願いします。 >