protected override ICollection <IResultFuzzyMember> InitializeMembers()
        {
            var members = new HashSet <IResultFuzzyMember>();

            _very_down       = new LinearResult("Very Down", this, -80f, 20f, 0f);
            _moderately_down = new LinearResult("Moderately Down", this, -60f, 20f, 0f);
            _slightly_down   = new LinearResult("Slightly Down", this, -40f, 20f, 0f);
            _going_down      = new LinearResult("Going Down", this, -20f, 20f, 0f);
            _center          = new LinearResult("Center", this, 0f, 20f, 0f);
            _going_up        = new LinearResult("Going Up", this, 20f, 20f, 0f);
            _slightly_up     = new LinearResult("Slightly Up", this, 40f, 20f, 0f);
            _moderately_up   = new LinearResult("Moderately Up", this, 60f, 20f, 0f);
            _very_up         = new LinearResult("Very Up", this, 80f, 20f, 0f);

            members.Add(_very_down);
            members.Add(_moderately_down);
            members.Add(_slightly_down);
            members.Add(_going_down);
            members.Add(_center);
            members.Add(_going_up);
            members.Add(_slightly_up);
            members.Add(_moderately_up);
            members.Add(_very_up);

            return(members);
        }
예제 #2
0
        /// <summary>
        /// Set results based on internal solver status
        /// </summary>
        private void SetResult(Z3Result status)
        {
            switch (status)
            {
            case Z3Result.Optimal:
                _result          = LinearResult.Optimal;
                _solutionQuality = LinearSolutionQuality.Exact;
                break;

            case Z3Result.LocalOptimal:
                _result          = LinearResult.Feasible;
                _solutionQuality = LinearSolutionQuality.Approximate;
                break;

            case Z3Result.Feasible:
                _result          = LinearResult.Feasible;
                _solutionQuality = LinearSolutionQuality.Exact;
                break;

            case Z3Result.Infeasible:
                _result          = LinearResult.InfeasiblePrimal;
                _solutionQuality = LinearSolutionQuality.None;
                break;

            case Z3Result.Interrupted:
                _result          = LinearResult.Interrupted;
                _solutionQuality = LinearSolutionQuality.None;
                break;

            default:
                Debug.Assert(false, "Unrecognized Z3 Result");
                break;
            }
        }
예제 #3
0
            public double[] SolveLowLevelLP()
            {
                // Solve the LP
                Console.Write("Solving LP ... ");

                GurobiParams pms = new GurobiParams();

                pms.OutputFlag = false;
                pms.TimeLimit  = (int)RobustnessOptions.LPTimeMilliSeconds;

                // Try to prevent GC from happening here ...
                // First do a massive reclaim ...
                GC.Collect(2);
                // Then save the old GC mode and set the one now to low latency ...
                var old_gc_mode = System.Runtime.GCSettings.LatencyMode;

                System.Runtime.GCSettings.LatencyMode = System.Runtime.GCLatencyMode.LowLatency;

                var answer = solver_.Solve(pms);

                // Restore GC mode ...
                System.Runtime.GCSettings.LatencyMode = old_gc_mode;

                // DV: For now!
                //double solval = answer.GetSolutionValue(objective_id).ToDouble();
                //Console.WriteLine("Objective (row) value: {0}", solval);
                //Console.WriteLine("Objective (variable) GetValue: {0}", answer.GetValue(vars_[LPSTerm.TotalVarCount() - 1]).ToDouble());
                //var report = solver_.GetReport(LinearSolverReportType.None);
                //Console.WriteLine("Report:");
                //Console.WriteLine(report);


                LinearResult result = answer.LpResult;

                if (result != LinearResult.Optimal)
                {
                    if (result != LinearResult.Feasible)
                    {
                        Console.WriteLine("LP non-feasible");
                        return(null);
                    }
                    else // Feasible
                    {
                        Console.WriteLine("LP feasible but non-optimal solution");
                    }
                }
                Console.WriteLine("LP optimal solution found");

                double[] vs = new double[input_dimension_];
                for (int i = 0; i < input_dimension_; i++)
                {
                    vs[i] = answer.GetValue(vars_[i]).ToDouble();
                }

                return(vs);
            }
예제 #4
0
 /// <summary>Constructor that initializes the base clases</summary>
 public Z3MILPSolver() : base(null) 
 {
     _result = LinearResult.Feasible;
     _solver = new Z3BaseSolver(this);
 }
예제 #5
0
 /// <summary>
 /// Set results based on internal solver status
 /// </summary>
 private void SetResult(Z3Result status)
 {
     switch (status)
     {
         case Z3Result.Optimal:
             _result = LinearResult.Optimal;
             _solutionQuality = LinearSolutionQuality.Exact;
             break;
         case Z3Result.LocalOptimal:
             _result = LinearResult.Feasible;
             _solutionQuality = LinearSolutionQuality.Approximate;
             break;
         case Z3Result.Feasible:
             _result = LinearResult.Feasible;
             _solutionQuality = LinearSolutionQuality.Exact;
             break;
         case Z3Result.Infeasible:
             _result = LinearResult.InfeasiblePrimal;
             _solutionQuality = LinearSolutionQuality.None;
             break;
         case Z3Result.Interrupted:
             _result = LinearResult.Interrupted;
             _solutionQuality = LinearSolutionQuality.None;
             break;
         default:
             Debug.Assert(false, "Unrecognized Z3 Result");
             break;
     } 
 }
예제 #6
0
 /// <summary>Constructor that initializes the base clases</summary>
 public Z3MILPSolver() : base(null)
 {
     _result = LinearResult.Feasible;
     _solver = new Z3BaseSolver(this);
 }