private void OnInitMatching(object sender, EventArgs e) { int n = (int)this.upDownN.Value; matchingInstance = new StableMatching(n); matchingInstance.InitRandom(random); textBox1.Text = matchingInstance.InstanceString(); }
void AssignCarriers(Deployment Deployment) { var passengers = Deployment.Units.Where(i => i.Configuration.IsPassenger).ToList(); var carriers = Deployment.Units.Where(i => i.Configuration.IsCarrier).ToList(); if (passengers.Count == 0 || carriers.Count == 0) { return; } carriers.Sort(new FluentComparator <Unit>(i => i.Configuration.UnitClass == UnitClass.TRANSPORT).Invert()); carriers = carriers.Take(passengers.Count).ToList(); var matching = new StableMatching <Unit, Unit>(); carriers.ForEach(matching.AddPrimaryActor); passengers.ForEach(matching.AddSecondaryActor); foreach (var passenger in passengers) { foreach (var carrier in carriers) { if (carrier.Configuration.CanLoad(passenger.Configuration) == OrderInvalidReason.NONE) { matching.SetPrimaryPreference( carrier, passenger, passenger.GetPointValue() / Math.Max(.01, passenger.Configuration.Movement)); matching.SetSecondaryPreference( passenger, carrier, carrier.Configuration.UnitClass == UnitClass.TRANSPORT ? carrier.GetPointValue() : 1); } else { matching.SetPrimaryPreference(carrier, passenger, 0); matching.SetSecondaryPreference(passenger, carrier, 0); } } } foreach (var assignment in matching.GetPairs() .Where(i => i.Second != null && i.First.Configuration.CanLoad(i.Second.Configuration) == OrderInvalidReason.NONE)) { AddAssignment(new UnitAssignment(assignment.First, assignment.Second, UnitAssignmentType.CARRIER)); } }
public List <Pair <Matched, Matched> > CreateStableMatching(List <Matched> Sounds, List <Matched> Symbols) { StableMatching <Matched, Matched> StableMatching = new StableMatching <Matched, Matched>(); foreach (Matched Sound in Sounds) { StableMatching.AddPrimaryActor(Sound); } foreach (Matched Symbol in Symbols) { StableMatching.AddSecondaryActor(Symbol); foreach (Matched Sound in Sounds) { StableMatching.SetPrimaryPreference(Sound, Symbol, Sound.GetPreference(Symbol)); StableMatching.SetSecondaryPreference(Symbol, Sound, Sound.Frequency); } } return(StableMatching.GetPairs()); }
private void OnIterateClick(object sender, EventArgs e) { Trace trace = new Trace(true); int reps = (int)this.upDownReps.Value; int n = (int)this.upDownN.Value; if (n > 100) { trace.Flag = false; } matchingInstance = new StableMatching(n); long mRank = 0; long wRank = 0; string results = ""; this.countTextBox.Text = "0"; this.countTextBox.Refresh(); for (int i = 0; i < reps; i++) { matchingInstance.InitRandom(random); matchingInstance.GaleShapley(trace); results += RankString(trace) + "\r\n"; mRank += trace.MRank; wRank += trace.WRank; this.countTextBox.Text = i.ToString(); this.countTextBox.Refresh(); } this.countTextBox.Text = reps.ToString(); textBox3.Text = results; float avgMRank = ((float)mRank) / (reps); float avgWRank = ((float)wRank) / (reps); textBox2.Text = "Avg MRank: " + avgMRank + " (" + avgMRank / n + ") Avg WRank: " + avgWRank + " (" + avgWRank / n + ")"; }