public static double CalculateHarmoniousness(List <NeatPlayer> players) { var outputs = FitnessUtils.GetPitchOutput(players); var inputs = FitnessUtils.GetPitchInput(); int fitness = PERFECT_PITCH_SCORE; int outOfKey = OutOfKey(outputs) * 10; fitness -= outOfKey; int badPitch = BadPitch(outputs, inputs); fitness -= badPitch; int sameNote = SameNote(outputs) * 100; fitness -= sameNote; int idInput = IdentityInput(inputs, outputs) * 15; int idOutput = IdentityModules(outputs) * 10; fitness -= idOutput; fitness -= idInput; int tooBigGap = TooBigGap(outputs) * 10; fitness -= tooBigGap; return(fitness); }
public static double CalculateHarmoniousness(List <NeatPlayer> players) { var outputs = FitnessUtils.GetPitchOutput(players); var inputs = FitnessUtils.GetPitchInput(); int fitness = PERFECT_PITCH_SCORE; int outOfKey = OutOfKey(outputs) * 10; fitness -= outOfKey; int badPitch = BadPitch(outputs, inputs) * 100; fitness -= badPitch; int sameNote = SameNote(outputs) * 10; fitness -= sameNote; //////// //////////discourage the modules from playing the same things int idInput = IdentityInput(inputs, outputs) * 15; int idOutput = IdentityModules(outputs) * 10; fitness -= idOutput; fitness -= idInput; //////makes modules play in a hierarchy //////NOTE: Probably broken - module position in the fitness function isn't fixed, which this function assumes int lower = LowerThanPrevious(outputs); fitness -= lower; //// //////make sure the gap to the previous note is less than 7 semitones int tooBigGap = TooBigGap(outputs) * 10; fitness -= tooBigGap; int dissonanceInput = DissonanceInput(inputs, outputs) * 5; int dissonanceOutput = DissonanceModules(outputs) * 5; fitness -= dissonanceInput; fitness -= dissonanceOutput; int chord = Chord(outputs, FitnessUtils.GetChords()) * 5; fitness -= chord; return(fitness); }
public static double CalculateRegularity(List <NeatPlayer> players) { List <int>[] rests; double[][] outputs; double[][] durations = FitnessUtils.GetRhythmOutput(players, out rests, out outputs); double[] inputs = FitnessUtils.GetRhythmInput(); double[] inputDurations = FitnessUtils.GetRhythmInputDurations(); double fitness = PERFECT_RHYTHM_SCORE; //double distanceFromTotal = DistanceFromTotal(durations); //fitness -= distanceFromTotal; int tooFew = TooFew(inputDurations, durations, rests) * 10; fitness -= tooFew; int tooMany = TooMany(inputDurations, durations); fitness -= tooMany; int sameDurationsInput = SameDurationsInput(inputDurations, durations) * 20; int sameDurationsOutputs = SameDurationsModules(durations) * 10; fitness -= sameDurationsInput; fitness -= sameDurationsOutputs; int restCheck = RestCheck(inputs, durations, rests); fitness -= restCheck; //makes sure an appropriate number of modules are playing at the same time //int differentTimes = PlayingAtDifferentTimes(durations, rests, inputs) / 10; //fitness -= differentTimes; int standardDeviation = StandardDeviation(outputs[0]); fitness -= standardDeviation; int onBeat = OnBeat(durations) * 10; fitness -= onBeat; return(fitness); }
public static double CalculateHarmoniousness(List <NeatPlayer> players) { var outputs = FitnessUtils.GetPitchOutput(players); var inputs = FitnessUtils.GetPitchInput(); int fitness = PERFECT_PITCH_SCORE; int outOfKey = OutOfKey(outputs) * 20; fitness -= outOfKey; int badPitch = BadPitch(outputs, inputs); fitness -= badPitch; int sameNote = SameNote(outputs) * 25; fitness -= sameNote; int idInput = IdentityInput(inputs, outputs) * 10; int idOutput = IdentityModules(outputs) * 5; fitness -= idOutput; fitness -= idInput; int tooBigGap = TooBigGap(outputs) * 10; fitness -= tooBigGap; int dissonanceInput = DissonanceInput(inputs, outputs) * 5; int dissonanceOutput = DissonanceModules(outputs) * 5; fitness -= dissonanceInput; fitness -= dissonanceOutput; int chord = Chord(outputs, FitnessUtils.GetChords()) * 10; fitness -= chord; int belowInput = BelowInput(inputs, outputs) * 5; fitness -= belowInput; return(fitness); }
public static double CalculateRegularity(List <NeatPlayer> players) { List <int>[] rests; double[][] outputs; double[][] durations = FitnessUtils.GetRhythmOutput(players, out rests, out outputs); double[] inputs = FitnessUtils.GetRhythmInput(); double[] inputDurations = FitnessUtils.GetRhythmInputDurations(); double fitness = PERFECT_RHYTHM_SCORE; double distanceFromTotal = DistanceFromTotal(durations); fitness -= distanceFromTotal; int tooFew = TooFew(inputs, durations, rests); fitness -= tooFew; int tooMany = TooMany(inputs, durations); fitness -= tooMany; int sameDurations = SameDurationsInput(inputDurations, durations); sameDurations += SameDurationsModules(durations); fitness -= sameDurations; int restCheck = RestCheck(inputs, durations, rests); fitness -= restCheck; int differentTimes = PlayingAtDifferentTimes(durations, rests, inputs); //fitness -= differentTimes; return(fitness); }