// KnapSackGen.java // Giedrius Norkevicius & Skirmante Taladyte VDU MIF 1 // KnapSackGen.class // KnapSackGenDomain.class // KnapGenWeightProvider.class // KnapGenDataUrlProvider.class package lt.ktu.gmj.tasks; import lt.ktu.gmj.*; import lt.ktu.gmj.propertySheet.*; import java.net.*; import java.io.*; import java.util.*; import java.lang.*; import GlobalTools; //********************* Sprendimo funkcijos tasko srities apibrezimas ********** class KnapSackGenDomain extends Domain { static final String []dimensions= { "Cross Probability" }; KnapSackGenDomain () { min[0] =0; max[0] =1.0; defaultPoint.x[0] = 0.5; //santykine tikimybe kryzmini i-aja eilute } public String[] dimensions () { return dimensions; } }; //************************ Kuprines uzdavinio klase Sprendimo funkcija - GA *************************** public class KnapSackGen implements Task { private double norm_point[]; //normalizuotas sprendimo funkcijos taskas private int number_of_objects; //bendras daiktu skaicius public double total_weight=100; public int Iterations = 10; public int Initialpopulation = 10; private Genetic G; private float object_cost[]; //daiktu kainos private float object_weight[]; //daiktu svoriai private double Wealth[]; private Random rnd = new Random(); //atsitiktiniu skaiciu generatorius public String data_url; //duomenu failo URL private String data_url_old = new String(); //seno duomenu failo URL private KnapSackGenDomain mydomain = new KnapSackGenDomain(); //sprendimo funkcijos tasko reiksmiu sritis //************ Duomenu ivedimo metodas private void input() throws java.net.MalformedURLException,java.io.IOException { int i,k,num = 0; float f1,f2; String data_line; number_of_objects = 0; //----------------- Pasirenkame duomenu saltini URL tmyurl = new URL (data_url); System.out.println("Reading data from: "+tmyurl.getHost()+tmyurl.getFile()); //----------------- Nuskaitom is duomenu failo objektu kieki URLConnection tmycon = tmyurl.openConnection(); System.out.println("Data type: "+tmycon.getContentType()+" with size: "+tmycon.getContentLength()); InputStream tis = tmycon.getInputStream(); DataInputStream tids = new DataInputStream(tis); tids.readLine(); //pavadinimai while((data_line=tids.readLine()) != null) { StringTokenizer st = new StringTokenizer(data_line); st.nextToken(); st.nextToken(); number_of_objects += Integer.valueOf(st.nextToken()).intValue(); num++; } System.out.println("Object types: "+num+" and total ammount: "+number_of_objects); tids.close(); tis.close(); //----------------- Isskiriam atminti object_cost = new float[number_of_objects]; object_weight= new float[number_of_objects]; Wealth = new double[Initialpopulation]; G = new Genetic(number_of_objects,Initialpopulation); //----------------- Nuskaitinejame duomenis URLConnection mycon = tmyurl.openConnection(); InputStream is = mycon.getInputStream(); DataInputStream ids = new DataInputStream(is); ids.readLine(); //pavadinimai num = 0; while((data_line = ids.readLine()) != null) { StringTokenizer st = new StringTokenizer(data_line); f1 = Float.valueOf(st.nextToken()).floatValue(); //svoris f2 = Float.valueOf(st.nextToken()).floatValue(); //kaina k = Integer.valueOf(st.nextToken()).intValue(); //kiekis for (i = 0; i < k; i++) { object_weight[num] = f1; object_cost [num] = f2; num++; } } ids.close(); is.close(); System.out.println("Data ready..."); } //********* Sprendimo funkcijos tasko normalizavimo metodas /* private void normalize (Point pt) { double sum = 0; norm_point = new double[3]; for (int i = 0; i < pt.x.length; i++) sum += pt.x[i]; if (sum != 0) for (int i = 0; i < pt.x.length; i++) norm_point[i] = pt.x[i]/sum; }*/ //********* Kainos funkcijos reiksmes skaiciavim metodas private double calculation(Point pt) { int i,j; double prob; double cost; G.generate(); for (i=0;i