[Toss-devel-svn] SF.net SVN: toss:[1411] trunk/Toss
Status: Beta
Brought to you by:
lukaszkaiser
|
From: <luk...@us...> - 2011-04-15 18:34:24
|
Revision: 1411
http://toss.svn.sourceforge.net/toss/?rev=1411&view=rev
Author: lukaszkaiser
Date: 2011-04-15 18:34:16 +0000 (Fri, 15 Apr 2011)
Log Message:
-----------
Correcting the remaining compilation problems - everything seems to work with the new type now.
Modified Paths:
--------------
trunk/Toss/Arena/Arena.ml
trunk/Toss/GGP/GDL.ml
trunk/Toss/Server/Server.ml
Modified: trunk/Toss/Arena/Arena.ml
===================================================================
--- trunk/Toss/Arena/Arena.ml 2011-04-14 23:57:24 UTC (rev 1410)
+++ trunk/Toss/Arena/Arena.ml 2011-04-15 18:34:16 UTC (rev 1411)
@@ -150,7 +150,6 @@
moves? *)
let pname = match pname with None -> "1" | Some p -> p in
fun player_names ->
- let player = List.assoc pname player_names in
let zero_loc = { payoff = Formula.Const 0. ; view = (Formula.And [], []);
heur = []; moves = [] } in
let locs = List.map (fun (pl, poff) ->
@@ -780,11 +779,18 @@
(string_of_int (Array.length state_game.graph)))
| SetLocPlayer (i, player) -> failwith "unsupported for now, concurrency"
(* ((state_game, state), "LOC PLAYER SET") *)
- | GetLocPlayer (i) -> failwith "unsupported for now, concurrency"
- (* if i < 0 || i > Array.length state_game.graph then
+ | GetLocPlayer (i) ->
+ if i < 0 || i > Array.length state_game.graph then
((state_game, state), "ERR location "^string_of_int i^" not found")
- else ((state_game, state), Aux.rev_assoc state_game.player_names
- state_game.graph.(i).player) *)
+ else
+ let players =
+ Aux.array_argfind_all (fun l-> l.moves <> []) state_game.graph.(i) in
+ if List.length players <> 1 then
+ ((state_game, state), "ERR location " ^ string_of_int i ^ " allows "^
+ (string_of_int (List.length players)) ^ " players to move")
+ else
+ let pl = List.hd players in
+ ((state_game, state), Aux.rev_assoc state_game.player_names pl)
| SetLocPayoff (i, player, payoff) ->
let (state_game, state), player =
try (state_game, state), List.assoc player state_game.player_names
Modified: trunk/Toss/GGP/GDL.ml
===================================================================
--- trunk/Toss/GGP/GDL.ml 2011-04-14 23:57:24 UTC (rev 1410)
+++ trunk/Toss/GGP/GDL.ml 2011-04-15 18:34:16 UTC (rev 1411)
@@ -3437,12 +3437,13 @@
label, (rname, rule)
) rules_brs in
let labels, rules = List.split labelled_rules in
- let location = {
- Arena.id = loc;
- player = find_player loc_players.(loc);
- payoffs = payoffs;
- moves = labels} in
- rules, location
+ let player = find_player loc_players.(loc) in
+ let location i = {
+ Arena.payoff = payoffs.(i);
+ moves = if i = player then labels else [];
+ view = (Formula.And [], []);
+ heur = []; } in
+ rules, Array.mapi (fun i _ -> location i) player_terms
) loc_toss_rules in
let rules = Array.map fst rules_and_locations
and locations = Array.map snd rules_and_locations in
@@ -3454,6 +3455,7 @@
let game = {
Arena.rules = rules;
graph = locations;
+ patterns = [];
num_players = players_n;
player_names = player_names;
data = [];
@@ -3542,7 +3544,8 @@
let loc = (snd state).Arena.cur_loc in
let actions = Array.of_list actions in
let location = (fst state).Arena.graph.(loc) in
- let player_action = actions.(location.Arena.player) in
+ let player_action = actions.(Aux.array_argfind (fun l -> l.Arena.moves <> [])
+ location) in
let struc = (snd state).Arena.struc in
(* {{{ log entry *)
if !debug_level > 2 then (
@@ -3723,8 +3726,10 @@
let our_turn gdl state =
let loc = (snd state).Arena.cur_loc in
- gdl.playing_as = (fst state).Arena.graph.(loc).Arena.player
+ gdl.playing_as = Aux.array_argfind (fun l -> l.Arena.moves <> [])
+ (fst state).Arena.graph.(loc)
+
let noop_move ?(force=false) gdl state =
let loc = state.Arena.cur_loc in
match gdl.noop_actions.(loc) with
Modified: trunk/Toss/Server/Server.ml
===================================================================
--- trunk/Toss/Server/Server.ml 2011-04-14 23:57:24 UTC (rev 1410)
+++ trunk/Toss/Server/Server.ml 2011-04-15 18:34:16 UTC (rev 1411)
@@ -109,6 +109,12 @@
exception Found of int
+(* TODO; FIXME; remove the function below. *)
+let select_moving a = (* temporary func - accept just one player w/ moves *)
+ let locs = Aux.array_find_all (fun l -> l.Arena.moves <> []) a in
+ if List.length locs <> 1 then failwith "too many moves" else
+ if locs = [] then a.(0) else List.hd locs
+
let req_handle in_ch out_ch =
try
let time_started = Unix.gettimeofday () in
@@ -152,9 +158,9 @@
r.ContinuousRule.discrete.DiscreteRule.lhs_struc in
let m =
List.map (fun (l, s) -> (fn lhs l, fn struc s)) mtch in
- let moves =
- Move.gen_moves Move.cGRID_SIZE rules
- (snd !state).Arena.struc graph.((snd !state).Arena.cur_loc) in
+ let loc = select_moving graph.((snd !state).Arena.cur_loc) in
+ let moves = Move.gen_moves Move.cGRID_SIZE
+ rules (snd !state).Arena.struc loc in
try
for i = 0 to Array.length moves - 1 do
(* FIXME: handle time and params! *)
@@ -221,9 +227,10 @@
if r_name <> "" then (
let {Arena.rules=rules; graph=graph} = fst !state in
+ let mv_loc = select_moving graph.((snd !state).Arena.cur_loc) in
let moves =
Move.gen_moves Move.cGRID_SIZE rules
- (snd !state).Arena.struc graph.((snd !state).Arena.cur_loc) in
+ (snd !state).Arena.struc mv_loc in
let pos =
(try
for i = 0 to Array.length moves - 1 do
@@ -349,7 +356,8 @@
let do_play game state depth1 depth2 advr heur1 heur2 =
let cur_state = ref state in
while Array.length (Move.list_moves game !cur_state) > 0 do
- let pl = game.Arena.graph.(!cur_state.Arena.cur_loc).Arena.player in
+ let pl = Aux.array_argfind (fun l -> l.Arena.moves <> [])
+ game.Arena.graph.(!cur_state.Arena.cur_loc) in
let depth = if pl = 0 then depth1 else if pl = 1 then depth2 else
failwith "only 2-player games supported in experiments for now" in
let timeo = if pl = 0 then !exp_p1_timeout else !exp_p2_timeout in
@@ -363,7 +371,8 @@
print_endline ("Evals: " ^ (string_of_int !Solver.eval_counter));
Solver.eval_counter := 0;
done;
- let payoffs = game.Arena.graph.(!cur_state.Arena.cur_loc).Arena.payoffs in
+ let payoffs = Array.map (fun l -> l.Arena.payoff)
+ game.Arena.graph.(!cur_state.Arena.cur_loc) in
Array.map (fun p -> Solver.M.get_real_val p (!cur_state).Arena.struc) payoffs
;;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|