/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package geneticmusic.fitness;
import geneticmusic.choraleRules.HCAvoidDissonances;
import geneticmusic.choraleRules.HCDuplicateFundamental;
import geneticmusic.choraleRules.HCValidChords;
import geneticmusic.choraleRules.HRInScale;
import geneticmusic.choraleRules.VEVoiceExtension;
import geneticmusic.choraleRules.VEVoiceIntervalRelation;
import geneticmusic.choraleRules.VIParallelism;
import geneticmusic.choraleRules.VIVoiceCross;
import geneticmusic.choraleRules.VLMediumVoicesContinuity;
import geneticmusic.choraleRules.VLMelodyContinuity;
import geneticmusic.domain.Alteration;
import geneticmusic.domain.Note;
import geneticmusic.domain.Pitch;
import jm.constants.Scales;
import org.jgap.FitnessFunction;
import org.jgap.IChromosome;
/**
*
* @author davide
*/
public class ChoraleFitnessFunction extends AbstractCompositionFitness {
public ChoraleFitnessFunction(){
super();
}
@Override
protected void configRules() {
double weight = 1/10.0;
Note tonic = new Note(Pitch.C, 5, Alteration.N, 4);
VEVoiceExtension verticalExtension = new VEVoiceExtension(weight);
VEVoiceIntervalRelation verticalIntervalRelation = new VEVoiceIntervalRelation(weight);
HRInScale inScale = new HRInScale(Scales.MAJOR_SCALE, tonic, weight*2);
HCValidChords validChords = new HCValidChords(weight, Scales.MAJOR_SCALE, tonic);
VIVoiceCross voiceCross = new VIVoiceCross(weight*1);
VLMelodyContinuity melodyConsistency = new VLMelodyContinuity(weight*2.2);
VLMediumVoicesContinuity mediumVoices = new VLMediumVoicesContinuity(weight*1);
HCAvoidDissonances avoidDissonances = new HCAvoidDissonances(weight*2);
VIParallelism parallelism = new VIParallelism(weight*1);
HCDuplicateFundamental duplicateFundamental = new HCDuplicateFundamental(weight*2, tonic, Scales.MAJOR_SCALE);
addRule(verticalExtension);//add rule to rule set
addRule(verticalIntervalRelation);
addRule(inScale);
addRule(validChords);
addRule(voiceCross);
addRule(melodyConsistency);
addRule(mediumVoices);
addRule(avoidDissonances);
addRule(parallelism);
addRule(duplicateFundamental);
}
}