package com.company.genetic_algorithm_knapsack;

import java.util.Random;

// this is a chromosome
public class Individual {

	// the genes are not binary values
	// [0, 1, 1, 0, 0]
	private int[] genes;
	private int[] weights;
	private int[] values;
	private int fitness;
	private Random random; 
	
	public Individual(int[] weights, int[] values) {
		this.weights = weights;
		this.values = values;
		this.genes = new int[values.length];
		this.random = new Random();
	}
	
	public int getFitness() {
		// MAX value but <= weight, if not, penaty !
		int weight = 0;
		int value = 0;
		
		for(int i=0;i<genes.length;++i) {
			if(genes[i] == 1) {
				weight += weights[i];
				value += values[i];
			}
		}
		
		if(weight <= Constants.KNAPSACK_CAPACITY) 
			return value;
		
		return Integer.MIN_VALUE;
	}
	
	public void generateIndividual() {
		for(int i=0;i<genes.length;++i) { 
			genes[i] = random.nextInt(2);
		}	
	}
	
	public void setGene(int index, int value) {
		genes[index] = value;
	}
	
	public int getGene(int index) {
		return genes[index];
	}
	
	@Override
	public String toString() {
		
		String s = "";
		
		for(int i=0;i<genes.length;++i)
			s += genes[i] + "-";
		
		return s;
	}
}