Guest User

Untitled

a guest
Jul 15th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.63 KB | None | 0 0
  1. 1
  2.  
  3. 1. En mulig heurestikk er å se hvilke brikker som er på feil plass, og se hvor langt de må flyttes for å komme på rett plass, uten å tenke på at
  4.  
  5. andre må flyttes. Må tenke på at de kun kan flyttes ortogonalt med plasseringen sin.
  6.  
  7. 2. En annen er å telle antall brikker som er på feil plass.
  8.  
  9.  
  10. At en heurestikk er admissible betyr at den aldri vil overestimere kostnaden med å nå mål-staten. Kostnaden vil være den optimale løsningen, om
  11.  
  12. man ser bort fra restriksjoner.
  13.  
  14. 1 er admissible fordi for å komme til rett posisjon må de minst flyttes så langt.
  15. 2 er admissible fordi de antall brikker som er feil må bytte plass, og det tar minst 1 flytt.
  16.  
  17. package ov7;
  18.  
  19. import java.awt.Point;
  20. import java.util.Arrays;
  21. import java.util.Vector;
  22.  
  23. public class MyState extends State {
  24.  
  25. public int[][] board;
  26.  
  27.  
  28.  
  29. public MyState(int[][] board) {
  30. super();
  31. this.board = board;
  32.  
  33.  
  34. }
  35.  
  36. public boolean equals(State state) {
  37. MyState mstate = (MyState)state;
  38. for (int i = 0; i < board.length; i++) {
  39. for (int j = 0; j < board[0].length; j++) {
  40. if(board[i][j] != mstate.board[i][j])
  41. return false;
  42. }
  43. }
  44. return true;
  45. }
  46.  
  47. public int estimate(State goal) {
  48.  
  49. MyState mstate = (MyState)goal;
  50. int cost = 0;
  51.  
  52. //Method 1
  53. for (int i = 0; i < board.length; i++) {
  54. for (int j = 0; j < board[0].length; j++) {
  55. if(mstate.board[i][j] != board[i][j])
  56. cost++;
  57. }
  58. }
  59. //return cost;
  60.  
  61.  
  62. //Method 2
  63. Point[] solutionarray = new Point[(mstate.board.length * mstate.board[0].length)];
  64. for (int i = 0; i < mstate.board.length; i++) {
  65. for (int j = 0; j < mstate.board[0].length; j++) {
  66. if(mstate.board[i][j] != 0)
  67. solutionarray[mstate.board[i][j]] = new Point(i,j);
  68. }
  69. }
  70.  
  71. for (int i = 0; i < board.length; i++) {
  72. for (int j = 0; j < board[0].length; j++) {
  73. if(board[i][j] != 0)
  74. cost += solutionarray[board[i][j]].distance(i, j);
  75. }
  76. }
  77.  
  78. return cost;
  79. }
  80.  
  81. public Vector<State> successors() {
  82. Vector<State> m = new Vector<State>();
  83.  
  84. Point zero = null;
  85. loop:
  86. for (int i = 0; i < board.length; i++) {
  87. for (int j = 0; j < board[0].length; j++) {
  88. if(board[i][j] == 0){
  89. zero = new Point(i,j);
  90. break loop;
  91. }
  92. }
  93. }
  94.  
  95.  
  96.  
  97.  
  98.  
  99. if()
  100. int[][] newBoard1 = board.clone();
  101. int temp = newBoard1[zero.x][zero.y-1];
  102. newBoard[zero.x][i] = 0;
  103. newBoard[]
  104.  
  105.  
  106. }
  107.  
  108.  
  109.  
  110.  
  111. public String toString() {
  112. String out = "";
  113. for (int i = 0; i < board.length; i++) {
  114. for (int j = 0; j < board[0].length; j++) {
  115. out += board[i][j] + " ";
  116. }
  117. out += "\n";
  118. }
  119.  
  120. return out;
  121. }
  122.  
  123.  
  124.  
  125. }
Add Comment
Please, Sign In to add comment