/// <summary> /// Calculates the fitness of a solution depending on settings /// </summary> /// <param name="solution">The solution</param> /// <returns>The fitness</returns> protected override double CalculateFitness(Solution solution) { StablePairsEvaluation stablePairsEvaluation = new StablePairsEvaluation(); GroupHappinessEvaluation groupHappinessEvaluation = new GroupHappinessEvaluation(); EgalitarianHappinessEvaluation egalitarianHappinessEvaluation = new EgalitarianHappinessEvaluation(); return(stablePairsEvaluation.Evaluate(_stableMarriage, solution) * Settings.StablePairWeight + groupHappinessEvaluation.Evaluate(_stableMarriage, solution) * Settings.GroupHappinessWeight - egalitarianHappinessEvaluation.Evaluate(_stableMarriage, solution) * Settings.EgalitarianHappinessWeight); }
private async Task <int> RunAlgorithm(int Index) { await Task.FromResult(0); AlgorithmBase algorithm = Context.Algorithms[Index].Algorithm; algorithm.Calculate(); StablePairsEvaluation stablePairsEvaluation = new StablePairsEvaluation(); GroupHappinessEvaluation groupHappinessEvaluation = new GroupHappinessEvaluation(); EgalitarianHappinessEvaluation egalitarianHappinessEvaluation = new EgalitarianHappinessEvaluation(); AlgorithmFinished?.Invoke(this, new AlgorithmEventArgs(Index, algorithm.Evaluate(stablePairsEvaluation), algorithm.Evaluate(groupHappinessEvaluation), algorithm.Evaluate(egalitarianHappinessEvaluation))); return(Index); }
public void NewRunModel() { StablePairsEvaluation stablePairsEvaluation = new StablePairsEvaluation(); GroupHappinessEvaluation groupHappinessEvaluation = new GroupHappinessEvaluation(); EgalitarianHappinessEvaluation egalitarianHappinessEvaluation = new EgalitarianHappinessEvaluation(); NewModel(); SetupModel setupModel = _model.NewSetupModel(); setupModel.Initialize(); ParticipantsModel participantsModel = _model.NewParticipantsModel(); participantsModel.Initialize(); PreferencesModel preferencesModel = _model.NewPreferencesModel(); preferencesModel.Initialize(); AlgorithmModel algorithmModel = _model.NewAlgorithmModel(); algorithmModel.Initialize(); RunModel runModel = _model.NewRunModel(); runModel.Initialize(); int receivedEvents = 0; Task task; NewModel(); runModel.AlgorithmStarted += (object sender, AlgorithmEventArgs e) => receivedEvents++; runModel.AlgorithmFinished += (object sender, AlgorithmEventArgs e) => { receivedEvents++; Assert.AreEqual(_context.Algorithms[e.Index].Algorithm.Evaluate(stablePairsEvaluation), e.StablePairs); Assert.AreEqual(_context.Algorithms[e.Index].Algorithm.Evaluate(groupHappinessEvaluation), e.GroupHappiness); Assert.AreEqual(_context.Algorithms[e.Index].Algorithm.Evaluate(egalitarianHappinessEvaluation), e.EgalitarianHappiness); }; task = Task.Run(async() => { await runModel.RunSingleAlgorithm(0); Assert.AreEqual(2, receivedEvents); }); }
public void TestInitialize() { stablePairsEvaluation = new StablePairsEvaluation(); groupHappinessEvaluation = new GroupHappinessEvaluation(); egalitarianHappinessEvaluation = new EgalitarianHappinessEvaluation(); }