コード例 #1
0
        public void CalcLexMaxCostMinSoftcons(out double maxCost, out int minSoftConsViol, out int minsoftconsBound)
        {
            StartLogging();

            Console.WriteLine("Finding Lexicogrpahic: Min Soft cost -> Min Cost");
            _model.SetObjective(1, 0);
            _model.Optimize(Timelimit * ExtraTimeOnCornerPointsMultiplier, MIPGap);
            minSoftConsViol  = _model.ObjSoftCons;
            minsoftconsBound = (int)Math.Ceiling(_model.ObjBound);
            if (UseSpecificObjConstraints)
            {
                _model.SetQualConstraintOnIndividualmeasssures();
            }
            else
            {
                _model.SetQualConstraint(minSoftConsViol);
            }

            _model.SetObjective(0, 1);
            _model.Optimize(Timelimit * ExtraTimeOnCornerPointsMultiplier, MIPGap);
            maxCost = _model.ObjCost;
            Console.WriteLine($"Objective from model: {_model.Objective}");
            _multiResults.Add(
                new MultiResult(_model.ObjCost, _model.ObjSoftCons, (int)Math.Ceiling(_model.ObjBound), minsoftconsBound, _model.GetUsedRooms(), _model.GetAssignments(), null, minSoftConsViol, (int)_stopwatch.Elapsed.TotalSeconds)
                );
            AddAllSolutions(_model);

            //           sol.SetAssignments(model.GetAssignments());
            //           Console.WriteLine(sol.AnalyzeSolution());

            if (UseSpecificObjConstraints)
            {
                _model.SetQualConstraintOnIndividualmeasssures(false);
            }
            else
            {
                _model.SetQualConstraint();
            }
        }