Ifi6057strategies
Allikas: Lambda
								
												
				8-Puzzle: vali ülesanne (testprob) ja soovitav otsingustrateegia. Hoiatus: kõik strateegiad ei pruugi mõistliku aja jooksul valmis saada, eriti Pythonis.
Python (pane aima-python-master kataloogi):
#eight.py
import search
badmoves = {4 : 3, 7: 6, 3 : 4, 6 : 7} # "teleporting" across board
class EightPuzzle(search.Problem):
    def actions(self, state):
        al = []
        tyhik = state[0]
        for offset in [-3, -1, 1, 3]:
            koht = tyhik + offset
            if koht >= 1 and koht <= 9 and badmoves.get(tyhik) != koht:
                al.append(koht)
        return al
    def result(self, state, action):
        newstate = [action]
        for el in state[1:]:
            if el == action:
                newstate.append(state[0])
            else:
                newstate.append(el)
        return tuple(newstate)
    def goal_test(self, state):
        return self.goal == state
GOAL = (9, 1, 2, 3 ,4 ,5, 6, 7, 8)
def test(initial, searchfunc):
    p = EightPuzzle(initial, GOAL)
    ip = search.InstrumentedProblem(p)
    n=searchfunc(ip)
    # expanded/goal tests/leaves/(solution)
    print (ip)
    if hasattr(n, "path"):
        print (n.path())
    else:
        print (n)
if __name__ == "__main__":
    a = (7, 2, 5, 3 ,1 ,8, 6, 4, 9)
    b = (5, 2, 6, 3, 4, 9, 8, 7, 1)
    c = (4, 2, 3, 8, 1, 9, 7, 6, 5)
    testprob = a
    test(testprob, search.breadth_first_tree_search)
    #test(testprob, search.breadth_first_search)
    #test(testprob, search.depth_first_tree_search)
    #test(testprob, search.depth_first_graph_search)
    def dls(param):
        return search.depth_limited_search(param, 7)
    #test(testprob, dls)
    #test(testprob, search.iterative_deepening_search)
Java (pane aima-gui/src/main/java/aima/gui/demo/search kataloogi):
//eight.java
package aima.gui.demo.search;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import aima.core.agent.Action;
import aima.core.environment.eightpuzzle.EightPuzzleBoard;
import aima.core.environment.eightpuzzle.EightPuzzleFunctionFactory;
import aima.core.search.framework.GoalTest;
import aima.core.search.framework.GraphSearch;
import aima.core.search.framework.Problem;
import aima.core.search.framework.Search;
import aima.core.search.framework.SearchAgent;
import aima.core.search.framework.TreeSearch;
import aima.core.search.uninformed.BreadthFirstSearch;
import aima.core.search.uninformed.DepthFirstSearch;
import aima.core.search.uninformed.DepthLimitedSearch;
import aima.core.search.uninformed.IterativeDeepeningSearch;
class MyGoalTest implements GoalTest {
	EightPuzzleBoard goal = new EightPuzzleBoard(new int[] { 1, 2, 3, 4, 5,
			6, 7, 8, 0 });
	public boolean isGoalState(Object state) {
		EightPuzzleBoard board = (EightPuzzleBoard) state;
		return board.equals(goal);
	}
}
public class eight {
	static void test(EightPuzzleBoard initial, Search searchfunc) {
		try {
			Problem problem = new Problem(initial, EightPuzzleFunctionFactory
					.getActionsFunction(), EightPuzzleFunctionFactory
					.getResultFunction(), new MyGoalTest());
			SearchAgent agent = new SearchAgent(problem, searchfunc);
			printInstrumentation(agent.getInstrumentation());
			printActions(agent.getActions());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	static EightPuzzleBoard a = new EightPuzzleBoard(
			new int[] { 4, 1, 3, 7, 2, 6, 0, 5, 8 });
	static EightPuzzleBoard b = new EightPuzzleBoard(
			new int[] { 8, 1, 3, 4, 0, 2, 7, 6, 5 });
	static EightPuzzleBoard c = new EightPuzzleBoard(
			new int[] { 4, 1, 2, 0, 8, 7, 6, 3, 5 });
	public static void main(String[] args) {
		EightPuzzleBoard testprob = a;
		test(testprob, new BreadthFirstSearch(new TreeSearch()));
//		test(testprob, new BreadthFirstSearch(new GraphSearch()));
//		test(testprob, new DepthFirstSearch(new TreeSearch()));
//		test(testprob, new DepthFirstSearch(new GraphSearch()));
//		test(testprob, new DepthLimitedSearch(7));
//		test(testprob, new IterativeDeepeningSearch());
	}
	private static void printInstrumentation(Properties properties) {
		Iterator<Object> keys = properties.keySet().iterator();
		while (keys.hasNext()) {
			String key = (String) keys.next();
			String property = properties.getProperty(key);
			System.out.println(key + " : " + property);
		}
	}
	private static void printActions(List<Action> actions) {
		for (int i = 0; i < actions.size(); i++) {
			String action = actions.get(i).toString();
			System.out.println(action);
		}
	}
}