/*
*
*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package geneticmusic.choraleRules;
import geneticmusic.domain.Note;
import geneticmusic.fitness.AbstractCompositionRule;
import org.jgap.Gene;
import org.jgap.IChromosome;
/**
*
* @author davide
*/
public class HCAvoidDissonances extends AbstractCompositionRule{
private static final double MINORSECOND = 0.5;
private static final double MAJOR_SEVEN = 5.5;
private static final double AUGMENTED_FORTH = 3;
public HCAvoidDissonances(double weight){
super(weight);
}
@Override
protected double evaluation(IChromosome ic) {
double result = 0.0;
Gene[] genes = ic.getGenes();
for(int i = 0; i< genes.length; i++){
Note[] currentChord = (Note[]) genes[i].getAllele();
double distanceSA = Math.abs(currentChord[0].distance(currentChord[1]));
double distanceAT = Math.abs(currentChord[1].distance(currentChord[2]));
double distanceTB = Math.abs(currentChord[2].distance(currentChord[3]));
if(distanceSA != MINORSECOND &&
distanceSA != MAJOR_SEVEN &&
distanceSA != AUGMENTED_FORTH)
result+= 1/(genes.length*3.0);
if(distanceAT != MINORSECOND &&
distanceAT != MAJOR_SEVEN &&
distanceAT != AUGMENTED_FORTH)
result+= 1/(genes.length*3.0);
if(distanceTB != MINORSECOND &&
distanceTB != MAJOR_SEVEN &&
distanceTB != AUGMENTED_FORTH)
result+= 1/(genes.length*3.0);
}
return result;
}
@Override
public String getName() {
return "Avoid Dissonances Rule";
}
}