Domáca č. 5 - Slepý Algoritmus (genetické algoritmy) a prevod binarneho cisla do a z grayovho kódu

Created: 2008-11-07 - 17:11

Obe zdrojáky by mali byť dosť jednoduché na pochopenie, keďže sa jednalo o jednoduché úlohy.

Prevod do a z grayovho kódu:


import java.util.Scanner;


public class BinarneCislo {
		
	public static int[] prevedDoGrayovhoKodu(int[] hodnoty){
		int[] noveHodnoty = new int[hodnoty.length];
		if(hodnoty.length!=0){
			noveHodnoty[0]=hodnoty[0];
			for (int i = 1; i < noveHodnoty.length; i++) {
				noveHodnoty[i]=hodnoty[i-1]^hodnoty[i]; //binarny XOR ^
			}
		}
		return noveHodnoty;
	}
	
	public static int[] prevedZGrayovhoKodu(int[] hodnoty){
		int[] noveHodnoty = new int[hodnoty.length];
		if(hodnoty.length!=0){
			noveHodnoty[0]=hodnoty[0];
			for (int i = 1; i < noveHodnoty.length; i++) {
				noveHodnoty[i]=hodnoty[i]^noveHodnoty[i-1];
			}
		}
		return noveHodnoty;
	}
	
	public static void main(String[] args) {
		System.out.println("Vstup obsahuje riadok s cislom n a dalsi");
		System.out.println("riadok s n medzerou oddelenym nulami a jednotkami");
		Scanner s = new Scanner(System.in);
		int n = s.nextInt(); // dlzka cisla
		int[] hodnoty = new int[n];
		for (int i = 0; i < n; i++) {
			hodnoty[i]=s.nextInt();
		}
		hodnoty = prevedDoGrayovhoKodu(hodnoty);
		for (int i = 0; i < hodnoty.length; i++) {
			System.out.print(hodnoty[i]+" ");
		}
		System.out.println();
		hodnoty = prevedZGrayovhoKodu(hodnoty);
		for (int i = 0; i < hodnoty.length; i++) {
			System.out.print(hodnoty[i]+" ");
		}
	}
}


Slepý algoritmus

public class SlepyAlgoritmus {
	public static int[] vymysliCislo(int dlzka){
		//toto len generuje pole nul a jednotiek...
		int[] cislo = new int[dlzka];
		for (int i = 0; i < cislo.length; i++) {
			int n = (int)(Math.random()*100-50);
			if(n>0)
				cislo[i]=1;
			else
				cislo[i]=0;
		}
		return cislo;
	}
	public static double f(double x){
		//dajme si, ze f(x) = sin(x)cos(2x)
		return Math.sin(x)*Math.cos(2*x);
	}
	private static String binToString(int[] pole) {
		String s = "";
		for (int i = 0; i < pole.length; i++) {
			s+=String.valueOf(pole[i]);
		}
		return s;
	}
	public static void main(String[] args) {	
		//dajme si, ze interval je <0,5pi>
		//dajme si, ze hladame maximum;
		//dajme si, ze dlzka binarneho cisla je 8
		double max = 0;
		for(int i=0;i<=100;i++){ //dame si 100 iteracii, nech to frci
			int[] binarneCislo = vymysliCislo(8);  
			//nase alpha - pseudonahodne generovane
			int intAlpha=0; 
			//hodnota alpha v prir. cislach
			for (int j = (binarneCislo.length-1); j >= 0; j--) {
				intAlpha+=binarneCislo[j]*Math.pow(2, binarneCislo.length-j-1);
			}
			double realAlpha=0+(5*Math.PI-0)/(Math.pow(2, 8)-1)*intAlpha; 
			//hodnota alphy v realnych cislach
			max = Math.max(max, f(realAlpha));
			System.out.println(i+". iteracia: alpha="+binToString(binarneCislo)
					+" intAplha="+intAlpha+" realAlpha="+realAlpha+" MAXIMUM="+max);
			//ukladame nase maximum
		}
		System.out.println("Priblizne maximum funkcie f je: "+max);
	}
}