Advertisement
Guest User

Untitled

a guest
Apr 25th, 2018
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.22 KB | None | 0 0
  1. % candidate_number(12345).
  2.  
  3. % Find hidden identity by repeatedly calling agent_ask_oracle(oscar,o(1),link,L)
  4. % find_identity(-A)
  5. find_identity(A) :-
  6. ( part_module(2) -> find_identity_2(A)
  7. ; otherwise -> find_identity_o(A)
  8. ).
  9.  
  10.  
  11. find_identity_2( ActorIdentity ) :-
  12. findall( Actor, actor(Actor), Actors ),
  13. check_actors( Actors , ActorIdentity ),
  14. !.
  15.  
  16. check_actors( Actors, ActorIdentity ) :-
  17. Actors = [ Actor ],
  18. ActorIdentity = Actor.
  19. check_actors( Actors, ActorIdentity ) :-
  20. get_link( Link ),
  21. get_matching_actors( Actors, Link, ActorsRemaining ),
  22. check_actors( ActorsRemaining, ActorIdentity ).
  23.  
  24. get_matching_actors( Actors, Link, ActorsRemaining ) :-
  25. include( check_actor_link( Link ), Actors, ActorsRemaining ).
  26.  
  27. check_actor_link( Link, Actor ) :-
  28. wp( Actor, WikiText ),
  29. wt_link( WikiText, Link ).
  30.  
  31. get_link( Link ) :-
  32. agent_ask_oracle( oscar, o(1), link, Link ).
  33.  
  34.  
  35. %%% part 3
  36.  
  37. find_identity_o( ActorIdentity ) :-
  38. findall( Actor, actor(Actor), Actors ),
  39. Oracles = [1,2,3,4,5,6,7,8,9,10],
  40. check_actors_2( Actors, ActorIdentity, Oracles ),
  41. !.
  42.  
  43. check_actors_2( Actors, ActorIdentity, Oracles ) :-
  44. writeln("checkactors 1"),
  45. Actors = [ Actor ],
  46. ActorIdentity = Actor.
  47. check_actors_2( Actors, ActorIdentity, [ Oracle | OraclesRest] ) :-
  48. writeln("checkactors 2"),
  49. find_oracle( Oracle, Link ),
  50. get_matching_actors( Actors, Link, ActorsRemaining ),
  51. check_actors_2( ActorsRemaining, ActorIdentity, OraclesRest ).
  52. check_actors_2( Actors, ActorIdentity, [] ) :-
  53. writeln("checkactors 3"),
  54. ActorIdentity = Actors.
  55.  
  56. find_oracle( Oracle, Link ) :-
  57. writeln("findoracle 1"),
  58. check_energy(Energy),
  59. Energy > 60,
  60. solve_task_1( find( o( Oracle ) ), Cost ),
  61. ask_oracle( Oracle, Link ).
  62. find_oracle( Oracle, Link ) :-
  63. writeln("findoracle 2"),
  64. solve_task_1( find( c( 1 ) ), Cost ),
  65. topup_energy( c( 1 ) ),
  66. find_oracle( Oracle, Link ).
  67.  
  68.  
  69. %% pseudocode:
  70. %%
  71. %% Get list of possible actors
  72. %% Get list of all oracles
  73. %% Do check_actors
  74. %% Each time get_link is called, move to new oracle
  75. %% check distance to new oracle
  76. %% check distance from new oracle position to charging station
  77. %% compare cost + 10 with energy
  78. %% if greater than 0, go to new oracle, get link, then move to charging station and top up
  79. %%
  80. %%
  81.  
  82. %% can just pass Agent instead of doing my_agent(Agent)
  83.  
  84. do_something( [] , [] ).
  85. do_something( [Oracle | OraclesRest ], Links ) :-
  86. agent_position( Position ),
  87. task_cost( find( o( Oracle ) ), Position, [cost(Cost1), depth(Depth1)], Path1, PositionEnd ),
  88. task_cost( find( c( 1 ) ), PositionEnd, [cost(Cost2), depth(Depth2)], Path2, PositionEnd2 ),
  89. check_energy( Energy ),
  90. Energy > Cost1 + Cost2 + 10, %% fails here i think
  91. agent_move( Path1 ),
  92. ask_oracle( Oracle , Link ),
  93. do_something( OraclesRest, LinksRest ),
  94. Links = [ Link | LinksRest ].
  95. do_something( Oracles, Links ) :-
  96. agent_position( Position ),
  97. task_cost( find( c( 1 ) ), Position, cost(Cost3), Path3, PositionEnd3 ),
  98. agent_move( Path3 ),
  99. topup_energy( c( 1 ) ),
  100. do_something( Oracles, Links ).
  101.  
  102.  
  103. ask_oracle( Oracle, Link ) :-
  104. my_agent( Agent ),
  105. query_world( agent_ask_oracle, [ Agent, o( Oracle ), link, Link ] ).
  106.  
  107. find_charger( Charger ) :-
  108. solve_task_1( find( c( Charger ) ), Cost ).
  109.  
  110. check_energy( Energy ) :-
  111. my_agent( Agent ),
  112. query_world( agent_current_energy, [ Agent, Energy ] ).
  113.  
  114. topup_energy( Charger ) :-
  115. my_agent( Agent ),
  116. query_world( agent_topup_energy, [ Agent, Charger ] ).
  117.  
  118. agent_position( Position ) :-
  119. my_agent( Agent ),
  120. query_world( agent_current_position, [ Agent, Position ] ).
  121.  
  122. task_cost( Task, Position, Cost, Path, PositionEnd ):-
  123. G is 0,
  124. calculate_f( Task, Position, G, F ),
  125. solve_task_as( Task, [ [ c( F, G, Position ), Position ] ], Path, Cost, PositionEnd ),
  126. !.
  127.  
  128. agent_move( Path ) :-
  129. my_agent( Agent ),
  130. reverse( Path, [ Init | PathReversed ] ),
  131. query_world( agent_do_moves, [ Agent, PathReversed ] ).
  132.  
  133.  
  134. %% I is 1,
  135. %% find_oracle( I ).
  136.  
  137. %% find_oracle( I ) :-
  138. %% solve_task( find( o(I) ), Cost ).
  139. %% my_agent( Agent ),
  140. %% query_world( agent_ask_oracle, [ Agent, Oracle, link, B ] ).
  141.  
  142. %% findall(A, actor(A), Actors),
  143. %% get_link( Link ),
  144. %% findall( A, ( member(A, Actors), check_link( A, Link ) ), ActorsRemaining ).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement