Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % candidate_number(12345).
- % Find hidden identity by repeatedly calling agent_ask_oracle(oscar,o(1),link,L)
- % find_identity(-A)
- find_identity(A) :-
- ( part_module(2) -> find_identity_2(A)
- ; otherwise -> find_identity_o(A)
- ).
- find_identity_2( ActorIdentity ) :-
- findall( Actor, actor(Actor), Actors ),
- check_actors( Actors , ActorIdentity ),
- !.
- check_actors( Actors, ActorIdentity ) :-
- Actors = [ Actor ],
- ActorIdentity = Actor.
- check_actors( Actors, ActorIdentity ) :-
- get_link( Link ),
- get_matching_actors( Actors, Link, ActorsRemaining ),
- check_actors( ActorsRemaining, ActorIdentity ).
- get_matching_actors( Actors, Link, ActorsRemaining ) :-
- include( check_actor_link( Link ), Actors, ActorsRemaining ).
- check_actor_link( Link, Actor ) :-
- wp( Actor, WikiText ),
- wt_link( WikiText, Link ).
- get_link( Link ) :-
- agent_ask_oracle( oscar, o(1), link, Link ).
- %%% part 3
- find_identity_o( ActorIdentity ) :-
- findall( Actor, actor(Actor), Actors ),
- Oracles = [1,2,3,4,5,6,7,8,9,10],
- check_actors_2( Actors, ActorIdentity, Oracles ),
- !.
- check_actors_2( Actors, ActorIdentity, Oracles ) :-
- writeln("checkactors 1"),
- Actors = [ Actor ],
- ActorIdentity = Actor.
- check_actors_2( Actors, ActorIdentity, [ Oracle | OraclesRest] ) :-
- writeln("checkactors 2"),
- find_oracle( Oracle, Link ),
- get_matching_actors( Actors, Link, ActorsRemaining ),
- check_actors_2( ActorsRemaining, ActorIdentity, OraclesRest ).
- check_actors_2( Actors, ActorIdentity, [] ) :-
- writeln("checkactors 3"),
- ActorIdentity = Actors.
- find_oracle( Oracle, Link ) :-
- writeln("findoracle 1"),
- check_energy(Energy),
- Energy > 60,
- solve_task_1( find( o( Oracle ) ), Cost ),
- ask_oracle( Oracle, Link ).
- find_oracle( Oracle, Link ) :-
- writeln("findoracle 2"),
- solve_task_1( find( c( 1 ) ), Cost ),
- topup_energy( c( 1 ) ),
- find_oracle( Oracle, Link ).
- %% pseudocode:
- %%
- %% Get list of possible actors
- %% Get list of all oracles
- %% Do check_actors
- %% Each time get_link is called, move to new oracle
- %% check distance to new oracle
- %% check distance from new oracle position to charging station
- %% compare cost + 10 with energy
- %% if greater than 0, go to new oracle, get link, then move to charging station and top up
- %%
- %%
- %% can just pass Agent instead of doing my_agent(Agent)
- do_something( [] , [] ).
- do_something( [Oracle | OraclesRest ], Links ) :-
- agent_position( Position ),
- task_cost( find( o( Oracle ) ), Position, [cost(Cost1), depth(Depth1)], Path1, PositionEnd ),
- task_cost( find( c( 1 ) ), PositionEnd, [cost(Cost2), depth(Depth2)], Path2, PositionEnd2 ),
- check_energy( Energy ),
- Energy > Cost1 + Cost2 + 10, %% fails here i think
- agent_move( Path1 ),
- ask_oracle( Oracle , Link ),
- do_something( OraclesRest, LinksRest ),
- Links = [ Link | LinksRest ].
- do_something( Oracles, Links ) :-
- agent_position( Position ),
- task_cost( find( c( 1 ) ), Position, cost(Cost3), Path3, PositionEnd3 ),
- agent_move( Path3 ),
- topup_energy( c( 1 ) ),
- do_something( Oracles, Links ).
- ask_oracle( Oracle, Link ) :-
- my_agent( Agent ),
- query_world( agent_ask_oracle, [ Agent, o( Oracle ), link, Link ] ).
- find_charger( Charger ) :-
- solve_task_1( find( c( Charger ) ), Cost ).
- check_energy( Energy ) :-
- my_agent( Agent ),
- query_world( agent_current_energy, [ Agent, Energy ] ).
- topup_energy( Charger ) :-
- my_agent( Agent ),
- query_world( agent_topup_energy, [ Agent, Charger ] ).
- agent_position( Position ) :-
- my_agent( Agent ),
- query_world( agent_current_position, [ Agent, Position ] ).
- task_cost( Task, Position, Cost, Path, PositionEnd ):-
- G is 0,
- calculate_f( Task, Position, G, F ),
- solve_task_as( Task, [ [ c( F, G, Position ), Position ] ], Path, Cost, PositionEnd ),
- !.
- agent_move( Path ) :-
- my_agent( Agent ),
- reverse( Path, [ Init | PathReversed ] ),
- query_world( agent_do_moves, [ Agent, PathReversed ] ).
- %% I is 1,
- %% find_oracle( I ).
- %% find_oracle( I ) :-
- %% solve_task( find( o(I) ), Cost ).
- %% my_agent( Agent ),
- %% query_world( agent_ask_oracle, [ Agent, Oracle, link, B ] ).
- %% findall(A, actor(A), Actors),
- %% get_link( Link ),
- %% findall( A, ( member(A, Actors), check_link( A, Link ) ), ActorsRemaining ).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement