/// <summary>
        /// Starts solving the problem using the Z3 solver.
        /// </summary>
        /// <param name="parameters">Parameters to the solver</param>
        /// <returns>The solution to the problem</returns>
        public INonlinearSolution Solve(ISolverParameters parameters)
        {
            // Get the Z3 parameters
            var z3Params = parameters as Z3BaseParams;

            Debug.Assert(z3Params != null, "Parameters should be an instance of Z3BaseParams.");

            _solver.Solve(z3Params, Goals, AddRow, MkTerm, SetResult);

            return(this);
        }
Beispiel #2
0
 public Solver(IGenomeFactory <T> genomeFactory,
               IGenomeEvaluator <T, TScore> evaluator,
               ISolverLogger <T, TScore> logger, ISolverParameters solverParameters,
               IEnumerable <IEarlyStoppingCondition <T, TScore> > earlyStoppingConditions,
               IEnumerable <IGenomeReproductionStrategy <T> > genomeReproductionStrategies)
 {
     _genomeFactory                = genomeFactory;
     _evaluator                    = evaluator;
     _logger                       = logger;
     _solverParameters             = solverParameters;
     _earlyStoppingConditions      = earlyStoppingConditions;
     _genomeReproductionStrategies = genomeReproductionStrategies;
 }
Beispiel #3
0
        /// <summary>
        /// Starts solving the problem using the Z3 solver.
        /// </summary>
        /// <param name="parameters">Parameters to the solver</param>
        /// <returns>The solution to the problem</returns>
        public ILinearSolution Solve(ISolverParameters parameters)
        {
            // Get the Z3 parameters
            var z3Params = parameters as Z3BaseParams;
            Debug.Assert(z3Params != null, "Parameters should be an instance of Z3BaseParams.");
            
            _solver.Solve(z3Params, Goals, AddRow, MkGoalRow, SetResult);

            return this;
        }
Beispiel #4
0
        public virtual ILinearSolution Solve(ISolverParameters parameters)
        {
            lock (classLock)
            {
                if (env != null) /* If shutdown has already been called, env may be null.  */
                {
                    mosek.Task task = null;
                    task = new mosek.Task(env, 0, 0);
                    task.set_Stream(mosek.streamtype.log, null);
                    task.set_Stream(mosek.streamtype.msg, null);
                    task.set_Stream(mosek.streamtype.err, null);

                    MosekSolverParams mosekParams = parameters as MosekSolverParams;

                    interrupted    = false;
                    primalObjIsdef = false;

                    foreach (System.Diagnostics.TraceListener listener in mosekParams.GetListeners())
                    {
                        msgStream.AddListener(listener);
                    }

                    if (msgStream.listeners.Count > 0)
                    {
                        task.set_Stream(mosek.streamtype.log, msgStream);
                    }

                    mosekParams.LoadMosekParams(task);
                    progressCB = new MosekProgress(parameters.QueryAbort);

                    task.ProgressCB = progressCB;

                    if (disposed)
                    {
                        progressCB.Abort();
                    }

                    LoadData(task);

                    if (mosekParams.TaskDumpFileName != null)
                    {
                        task.writedata(mosekParams.TaskDumpFileName);
                    }

                    try
                    {
                        task.optimize();
                    }
                    catch (mosek.Warning w)
                    {
                        if (w.Code == mosek.rescode.trm_user_callback)
                        {
                            interrupted = true;
                            // feasible solutions ?
                            if (task.getintinf(mosek.iinfitem.mio_num_int_solutions) > 0)
                            {
                                foundIntSolution = true;
                            }
                        }
                    }
                    catch (mosek.Error e)
                    {
                        throw new MosekMsfException(e.ToString());
                    }

                    if (task.getintinf(mosek.iinfitem.mio_num_relax) > 0)
                    {
                        mipBestBound = task.getdouinf(dinfitem.mio_obj_bound);
                    }

                    task.solutionsummary(mosek.streamtype.log);

                    UpdateSolution(task);
                    progressCB = null;
                    if (task != null)
                    {
                        task.Dispose();
                        task = null;
                    }
                }
            }

            ILinearSolution sol = CreateLinearSolution();

            return(sol);
        }