Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package codechef;
- import java.util.*;
- public class Demo {
- static ArrayList<Integer> a = new ArrayList<Integer>();
- static ArrayList<Integer> fx = new ArrayList<Integer>();
- static ArrayList<Double> probi = new ArrayList<Double>();
- static ArrayList<Double> ei = new ArrayList<Double>();
- static ArrayList<Integer> ac = new ArrayList<Integer>();
- public static void main(String args[]) {
- Scanner sc = new Scanner(System.in);
- System.out.println("Enter the number of initial chromosomes");
- int n = sc.nextInt();
- System.out.println("Enter the initial population");
- for (int i = 0; i < n; i++) {
- a.add(sc.nextInt());
- }
- int sum = 0;
- int max = 0;
- double avg = 0;
- for (int i = 0; i < n; i++) {
- int temp = a.get(i) * a.get(i);
- fx.add(temp);
- sum = sum + temp;
- if (temp >= max) {
- max = temp;
- }
- }
- avg = sum / n;
- for (int i = 0; i < n; i++) {
- double temp = (double) fx.get(i) / sum;
- probi.add(temp);
- }
- for (int i = 0; i < n; i++) {
- double temp = fx.get(i) / avg;
- ei.add(temp);
- if (Math.ceil(temp) - temp <= temp - Math.floor(temp)) {
- ac.add((int) Math.ceil(temp));
- } else {
- ac.add((int) Math.floor(temp));
- }
- }
- print();
- //Step 2
- int k = 0;
- for (int i = 0; i < n; i++) {
- if (ac.get(i) != 0) {
- for (int j = 0; j < ac.get(i); j++) {
- int temp = a.get(i);
- a.set(k, temp);
- k++;
- }
- }
- }
- print();
- //Cross over rate = 50%
- char finalc1[] = new char[4];
- char finalc2[] = new char[4];
- for (int i = 0; i < finalc1.length; i++) {
- finalc1[i] = '0';
- }
- for (int i = 0; i < finalc2.length; i++) {
- finalc2[i] = '0';
- }
- for (int i = 0; i < n / 2; i++) {
- String s1 = Integer.toBinaryString(a.get(i));
- char c1[] = s1.toCharArray();
- if (c1.length < 4) {
- for (int j = c1.length - 1; j >= 0; j--) {
- finalc1[4 - 1 - j] = c1[j];
- }
- } else {
- finalc1 = c1;
- }
- i++;
- String s2 = Integer.toBinaryString(a.get(i));
- char c2[] = s2.toCharArray();
- if (c2.length < 4) {
- for (int j = c2.length - 1; j >= 0; j--) {
- finalc2[4 - 1 - j] = c2[j];
- }
- } else {
- finalc2 = c2;
- }
- }
- //Cross over point = 2
- System.out.println("After crossover:");
- for (int i = 2; i < finalc1.length; i++) {
- char temp = finalc1[i];
- finalc1[i] = finalc2[i];
- finalc2[i] = temp;
- }
- for (int i = 0; i < finalc1.length; i++) {
- System.out.print(finalc1[i]);
- }
- System.out.println();
- for (int i = 0; i < finalc2.length; i++) {
- System.out.print(finalc2[i]);
- }
- System.out.println();
- //Mutation point = 3 and mutation rate = 12.5% ;
- if (finalc1[2] == '0') {
- finalc1[2] = '1';
- } else {
- finalc1[2] = '0';
- }
- if (finalc2[2] == '0') {
- finalc2[2] = '1';
- } else {
- finalc2[2] = '0';
- }
- System.out.println("After Mutation:");
- for (int i = 0; i < finalc1.length; i++) {
- System.out.print(finalc1[i]);
- }
- System.out.println();
- for (int i = 0; i < finalc2.length; i++) {
- System.out.print(finalc2[i]);
- }
- System.out.println();
- a.set(0, Integer.parseInt(String.valueOf(finalc1), 2));
- a.set(1, Integer.parseInt(String.valueOf(finalc2), 2));
- print();
- Collections.sort(a);
- System.out.println(a.get(a.size() - 1) + " will yield the maximum value");
- }
- public static void print() {
- System.out.println("a is " + "\t" + a);
- System.out.println("fx is " + "\t" + fx);
- System.out.println("pi is " + "\t" + probi);
- System.out.println("ei is " + "\t" + ei);
- System.out.println("ac is " + "\t" + ac);
- //System.out.println("The sum is "+ sum + ", the average is "+avg + " and the max is "+max);
- }
- }
- /*OUTPUT:
- Enter the number of initial chromosomes
- 4
- Enter the initial population
- 1
- 2
- 5
- 8
- a is [1, 2, 5, 8]
- fx is [1, 4, 25, 64]
- pi is [0.010638297872340425, 0.0425531914893617, 0.26595744680851063, 0.6808510638297872]
- ei is [0.043478260869565216, 0.17391304347826086, 1.0869565217391304, 2.782608695652174]
- ac is [0, 0, 1, 3]
- a is [5, 8, 8, 8]
- fx is [1, 4, 25, 64]
- pi is [0.010638297872340425, 0.0425531914893617, 0.26595744680851063, 0.6808510638297872]
- ei is [0.043478260869565216, 0.17391304347826086, 1.0869565217391304, 2.782608695652174]
- ac is [0, 0, 1, 3]
- After crossover:
- 0100
- 1001
- After Mutation:
- 0110
- 1011
- a is [6, 11, 8, 8]
- fx is [1, 4, 25, 64]
- pi is [0.010638297872340425, 0.0425531914893617, 0.26595744680851063, 0.6808510638297872]
- ei is [0.043478260869565216, 0.17391304347826086, 1.0869565217391304, 2.782608695652174]
- ac is [0, 0, 1, 3]
- 11 will yield the maximum value
- */
Add Comment
Please, Sign In to add comment