/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package geneticmusic.fitness;
import geneticmusic.genes.Note;
import geneticmusic.genes.Pitch;
import org.jgap.Gene;
import org.jgap.IChromosome;
/**
*
* @author davide
*/
public class RegisterFilterRule implements CompositionRule {
double weight = 0.0;
public RegisterFilterRule(double weight) {
this.weight = weight;
}
@Override
public double evaluate(IChromosome ic) {
double result = 0.0;
double totalNotes = ic.size() * 1.0;
Gene[] genes = ic.getGenes();
for (int i = 0; i < genes.length - 1; i++) {
Note currentNote = (Note) genes[i].getAllele();
Note nextNote = (Note) genes[i + 1].getAllele();
//must be a note to classify the octave
if (!currentNote.getPitch().equals(Pitch.R)) {
if (currentNote.getOctave() >= 3 && currentNote.getOctave() < 5) {
result += 0.9 * (1 / (totalNotes));
}
if (currentNote.getOctave() == nextNote.getOctave()) {
result += 0.1 * (1 / (totalNotes));
}
}
}
return weight * result;
}
}