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]+" "); } } }
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); } }