[infostudents] KI Blatt 3 Aufgabe 3

  • From: Cornelius Amzar <cornelius.amzar@xxxxxx>
  • To: infostudents@xxxxxxxxxxxxx
  • Date: Thu, 22 May 2008 00:19:31 +0200

Hier mal meine Klassen.. Funktioniert schon ganz gut. Aber ich denke es gibt noch Verbesserungspotential. Wenn ihr ne Idee habt -> her damit!

import java.util.Random;

class City {
        public float x = 10;
        public float y = 1;
        
        public City() {
                Random generator = new Random();
                this.x = generator.nextFloat();
                this.y = generator.nextFloat();
                
                
        }


}
import java.lang.Math;
import java.util.Random;
public class Path {

        int number; //Anzahl der STädte
        int i = 0;
        int j = 1;
        City[] cities; //Array von Städten
        
        //Konstruktor, erstellt ein Array mit n STädten
        public Path(int number){
                this.number = number;
                cities = new City[number];
                while(i <= cities.length-1){
                        cities[i] = new City();
                        i++;
                }
                
        }
        
        private float distance(City c, City d){
                float distance = (float) Math.sqrt(Math.pow(c.x - d.x, 2) + 
Math.pow(c.y - d.y, 2));
                return distance;
        }
        //Berechnet die Kosten des Pfades
        private float cost(){
                float pathlength = 0;
                int n = 1;
                int m = 0;

                while(n < cities.length){
                        pathlength = pathlength +  distance(cities[m], 
cities[n]);
                        n++;
                        m++;
                        }
                return pathlength;
                
        }

        /*//tauscht zwei gegebene Felder
        public void replace(int a, int b){
                City cache1 = cities[a];
                City cache2 = cities[b];
                cities[a] = cache2;
                cities[b] = cache1;     
        
        }*/
        //vertauscht zwei Felder eines gegebenen Path
        public void replace(int a, int b, Path c){
                City cache1 = c.cities[a];
                City cache2 = c.cities[b];
                c.cities[a] = cache2;
                c.cities[b] = cache1;   
        }
        
        //hillclimbing-Algorithmus
        public void hillclimbing(){
                
                Path copy = this;
                float cost = this.cost();
                System.out.println("Die ursprüngliche Pfadlänge ist: " + cost);
                System.out.println("Folgende Optimierungen wurden der Reihe 
nach vorgenommen:");
                float cost2 = 0;
                int length = this.cities.length;
                //Zufallszahlen um die FElder des Arrays anzusteuern
                Random gen = new Random();
                int a = gen.nextInt(length - 1);
                int b = gen.nextInt(length - 1);
                        

                
                int test = 0;
                
                while(test <= 10000){
                        copy.replace(a, b, copy);
                        cost2 = copy.cost();
                        
                        //Wenn der neue Pfad kürzer ist als der alte
                        if(cost2 < cost) {
                                this.cities = copy.cities;
                                System.out.println(cost2);
                                a = gen.nextInt(length);
                                b = gen.nextInt(length);
                                cost = cost2;
                        }
                        else {          
                                a = gen.nextInt(length);
                                b = gen.nextInt(length);
                        }
                        test++;
                        
                }

        }

        public static void main(String[] args) {
                //int i = 0;
                //int j = 1;
                Path r = new Path(5);
                
                r.hillclimbing();
                

                

        }

}

Other related posts:

  • » [infostudents] KI Blatt 3 Aufgabe 3