Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Tp_chapitre_3/.idea/vcs.xml → .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

374 changes: 38 additions & 336 deletions .idea/workspace.xml

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion Tp_chapitre_3/.idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

437 changes: 287 additions & 150 deletions Tp_chapitre_3/.idea/workspace.xml

Large diffs are not rendered by default.

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package fr.emse.ai.search.Cannibales;

import fr.emse.ai.search.core.Problem;

import java.util.ArrayList;
import java.util.Collection;

public class CannibalesOrientedGraphProblem implements Problem {

CannibalesState initialState = new CannibalesState(CannibalesState.MMMD);
CannibalesState finalState = new CannibalesState(CannibalesState.CCCG);

@Override
public Object getInitialState() {
return initialState;
}

@Override
public boolean isGoal(Object state) {
return state.equals(finalState);
}

@Override
public Collection<Object> getActions(Object state) {
ArrayList<Object> actions = new ArrayList<Object>();
String s = ((CannibalesState) state).value;
if (s.equals(CannibalesState.MMMD)) {
actions.add("go to MMMCG");
actions.add("go to MMMCCG");
} else if (s.equals(CannibalesState.MMMCG)) {
actions.add("go to MMMD");
actions.add("go to MCD");
} else if (s.equals(CannibalesState.MCD)) {
actions.add("go to MMMCG");
actions.add("go to MMCCG");
} else if (s.equals(CannibalesState.MMCCG)) {
actions.add("go to MCD");
actions.add("go to CCD");
} else if (s.equals(CannibalesState.CCD)) {
actions.add("go to MMCCG");
actions.add("go to CCCG");
} else if (s.equals(CannibalesState.CCCG)) {
actions.add("go to CCD");
} else if (s.equals(CannibalesState.MMMCCG)) {
actions.add("go to MMMD");
actions.add("go to MMCCD");
actions.add("go to MMMCD");
} else if (s.equals(CannibalesState.MMCCD)) {
actions.add("go to MMMCCG");
actions.add("go to MMMCCCG");
} else if (s.equals(CannibalesState.MMMCD)) {
actions.add("go to MMMCCG");
actions.add("go to MMMCCCG");
} else if (s.equals(CannibalesState.MMMCCCG)) {
actions.add("go to MMCCD");
actions.add("go to MMMCD");
actions.add("go to MMMCCD");
} else if (s.equals(CannibalesState.MMMCCD)) {
actions.add("go to MMMCCCG");
}

return actions;
}

@Override
public Object getNextState(Object state, Object action) {
if (action.equals("go to MMMD")) return new CannibalesState(CannibalesState.MMMD);
if (action.equals("go to MMMCG")) return new CannibalesState(CannibalesState.MMMCG);
if (action.equals("go to MCD")) return new CannibalesState(CannibalesState.MCD);
if (action.equals("go to MMCCG")) return new CannibalesState(CannibalesState.MMCCG);
if (action.equals("go to CCD")) return new CannibalesState(CannibalesState.CCD);
if (action.equals("go to CCCG")) return new CannibalesState(CannibalesState.CCCG);
if (action.equals("go to MMMCCG")) return new CannibalesState(CannibalesState.MMMCCG);
if (action.equals("go to MMCCD")) return new CannibalesState(CannibalesState.MMCCD);
if (action.equals("go to MMMCD")) return new CannibalesState(CannibalesState.MMMCD);
if (action.equals("go to MMMCCCG")) return new CannibalesState(CannibalesState.MMMCCCG);
if (action.equals("go to MMMCCD")) return new CannibalesState(CannibalesState.MMMCCD);
return null;
}

@Override
public double getStepCost(Object start, Object action, Object dest) {
return 1;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package fr.emse.ai.search.Cannibales;


//L'état est une chaîne de caractère de type 'l1'+'r'
// avec l1 une sous chaîne contenant M pour un missionnaire et C pour un cannibale sur la rive gauche
// (il n'est pas nécessaire d'expliciter les individus présents sur la rive droite )
// avec r=G si le bateau est sur la rive gauche et r=D si le bateau est sur la rive droite

public class CannibalesState {
public final static String MMMD ="MMMD";
public final static String MMMCG ="MMMCG";
public final static String MCD ="MCD";
public final static String MMCCG ="MMCCG";
public final static String CCD ="CCD";
public final static String CCCG ="CCCG";
public final static String MMMCCG ="MMMCCG";
public final static String MMCCD ="MMCCD";
public final static String MMMCD ="MMMCD";
public final static String MMMCCCG ="MMMCCCG";
public final static String MMMCCD ="MMMCCD";

public String value;

CannibalesState(String value) {
this.value = value;
}

public boolean equals(Object o) {
return o instanceof CannibalesState && ((CannibalesState) o).value.equals(this.value);
}

public String toString() {
return value;
}
}
23 changes: 23 additions & 0 deletions Tp_chapitre_3/src/fr/emse/ai/search/Cannibales/CannibalesTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package fr.emse.ai.search.Cannibales;


import fr.emse.ai.search.solver.BreadthFirstGraphSearch;
import fr.emse.ai.search.solver.DepthFirstGraphSearch;

public class CannibalesTest {

public static void main(String[] args) {
CannibalesOrientedGraphProblem p1 = new CannibalesOrientedGraphProblem();


//Depth first :
DepthFirstGraphSearch df = new DepthFirstGraphSearch();
String Sol = df.solve(p1).toString();
System.out.println("Solution to problem p1 using depth first : " + Sol);

//Breadth first :
BreadthFirstGraphSearch bf = new BreadthFirstGraphSearch();
String Sol2 = bf.solve(p1).toString();
System.out.println("Solution to problem p1 using breadth-first : " + Sol2);
}
}