Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1
- 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
- andre må flyttes. Må tenke på at de kun kan flyttes ortogonalt med plasseringen sin.
- 2. En annen er å telle antall brikker som er på feil plass.
- 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
- man ser bort fra restriksjoner.
- 1 er admissible fordi for å komme til rett posisjon må de minst flyttes så langt.
- 2 er admissible fordi de antall brikker som er feil må bytte plass, og det tar minst 1 flytt.
- package ov7;
- import java.awt.Point;
- import java.util.Arrays;
- import java.util.Vector;
- public class MyState extends State {
- public int[][] board;
- public MyState(int[][] board) {
- super();
- this.board = board;
- }
- public boolean equals(State state) {
- MyState mstate = (MyState)state;
- for (int i = 0; i < board.length; i++) {
- for (int j = 0; j < board[0].length; j++) {
- if(board[i][j] != mstate.board[i][j])
- return false;
- }
- }
- return true;
- }
- public int estimate(State goal) {
- MyState mstate = (MyState)goal;
- int cost = 0;
- //Method 1
- for (int i = 0; i < board.length; i++) {
- for (int j = 0; j < board[0].length; j++) {
- if(mstate.board[i][j] != board[i][j])
- cost++;
- }
- }
- //return cost;
- //Method 2
- Point[] solutionarray = new Point[(mstate.board.length * mstate.board[0].length)];
- for (int i = 0; i < mstate.board.length; i++) {
- for (int j = 0; j < mstate.board[0].length; j++) {
- if(mstate.board[i][j] != 0)
- solutionarray[mstate.board[i][j]] = new Point(i,j);
- }
- }
- for (int i = 0; i < board.length; i++) {
- for (int j = 0; j < board[0].length; j++) {
- if(board[i][j] != 0)
- cost += solutionarray[board[i][j]].distance(i, j);
- }
- }
- return cost;
- }
- public Vector<State> successors() {
- Vector<State> m = new Vector<State>();
- Point zero = null;
- loop:
- for (int i = 0; i < board.length; i++) {
- for (int j = 0; j < board[0].length; j++) {
- if(board[i][j] == 0){
- zero = new Point(i,j);
- break loop;
- }
- }
- }
- if()
- int[][] newBoard1 = board.clone();
- int temp = newBoard1[zero.x][zero.y-1];
- newBoard[zero.x][i] = 0;
- newBoard[]
- }
- public String toString() {
- String out = "";
- for (int i = 0; i < board.length; i++) {
- for (int j = 0; j < board[0].length; j++) {
- out += board[i][j] + " ";
- }
- out += "\n";
- }
- return out;
- }
- }
Add Comment
Please, Sign In to add comment