public HM3B001Model( IConstraintElementsAbstractFactory constraintElementsAbstractFactory, IConstraintsAbstractFactory constraintsAbstractFactory, ICrossJoinElementsAbstractFactory crossJoinElementsAbstractFactory, ICrossJoinsAbstractFactory crossJoinsAbstractFactory, IDependenciesAbstractFactory dependenciesAbstractFactory, IIndexElementsAbstractFactory indexElementsAbstractFactory, IIndicesAbstractFactory indicesAbstractFactory, IObjectiveFunctionsAbstractFactory objectiveFunctionsAbstractFactory, IParameterElementsAbstractFactory parameterElementsAbstractFactory, IParametersAbstractFactory parametersAbstractFactory, IVariablesAbstractFactory variablesAbstractFactory, IHM3BInputContext HM3BInputContext) : base( constraintElementsAbstractFactory, constraintsAbstractFactory, crossJoinElementsAbstractFactory, crossJoinsAbstractFactory, dependenciesAbstractFactory, indexElementsAbstractFactory, indicesAbstractFactory, objectiveFunctionsAbstractFactory, parameterElementsAbstractFactory, parametersAbstractFactory, variablesAbstractFactory, HM3BInputContext) { // v(m, r) this.v = parametersAbstractFactory.CreatevFactory().Create( this.Context.MachineOperatingRoomAssignments .Select(x => parameterElementsAbstractFactory.CreatevParameterElementFactory().Create( this.m.GetElementAt(x.Item1), this.r.GetElementAt(x.Item2), (FhirBoolean)x.Item3)) .ToImmutableList()); // w(j, r) this.w = parametersAbstractFactory.CreatewFactory().Create( this.Context.SurgicalSpecialtyOperatingRoomAssignments .Select(x => parameterElementsAbstractFactory.CreatewParameterElementFactory().Create( this.j.GetElementAt(x.Item1), this.r.GetElementAt(x.Item2), (FhirBoolean)x.Item3)) .ToImmutableList()); // y(s, r) this.y = variablesAbstractFactory.CreateyFactory().Create( dependenciesAbstractFactory.CreateVariableCollectionFactory().CreateBinary( model: this.Model, indexSet1: this.s.Value, indexSet2: this.r.Value)); // Constraints 1 this.Model.AddConstraints( this.mr.Value .Select( x => constraintElementsAbstractFactory.CreateConstraints1ConstraintElementFactory().Create( x.mIndexElement, x.rIndexElement, this.m, this.s, this.v, this.ζ, this.y) .Value)); // Constraints 5L this.Model.AddConstraints( this.srj.Value .Where( x => this.Δ.IsSurgeonMemberOfSurgicalSpecialty( x.jIndexElement, x.sIndexElement)) .Select( x => constraintElementsAbstractFactory.CreateConstraints5LConstraintElementFactory().Create( x.rIndexElement, x.sIndexElement, this.b, this.y) .Value)); // Constraints 5M this.Model.AddConstraints( this.srj.Value .Where( x => this.Δ.IsSurgeonMemberOfSurgicalSpecialty( x.jIndexElement, x.sIndexElement)) .Select( x => constraintElementsAbstractFactory.CreateConstraints5MConstraintElementFactory().Create( x.rIndexElement, x.sIndexElement, this.Bs, this.b, this.y) .Value)); // Constraints 5U this.Model.AddConstraints( this.srj.Value .Where( x => this.Δ.IsSurgeonMemberOfSurgicalSpecialty( x.jIndexElement, x.sIndexElement)) .Select( x => constraintElementsAbstractFactory.CreateConstraints5UConstraintElementFactory().Create( x.jIndexElement, x.rIndexElement, x.sIndexElement, this.BBar, this.Bs, this.w, this.y) .Value)); // Constraints 10 this.Model.AddConstraints( this.srt.Value .Select( x => constraintElementsAbstractFactory.CreateConstraints10ConstraintElementFactory().Create( x.rIndexElement, x.sIndexElement, x.tIndexElement, this.x, this.y) .Value)); }