1
0
This repository has been archived on 2025-03-06. You can view files and clone it, but cannot push or open issues or pull requests.
Jip J. Dekker fad1b07018 Squashed 'software/minizinc/' content from commit 4f10c8205
git-subtree-dir: software/minizinc
git-subtree-split: 4f10c82056ffcb1041d7ffef29d77a7eef92cf76
2021-06-16 14:06:46 +10:00

96 lines
2.6 KiB
C++

/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
/*
* Main authors:
* Guido Tack <guido.tack@monash.edu>
*/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#pragma once
#include <minizinc/flattener.hh>
#include <minizinc/solver.hh>
//#include <minizinc/solver_instance_base.hh>
namespace MiniZinc {
class FZNSolverOptions : public SolverInstanceBase::Options {
public:
std::string fznSolver;
std::string backend;
std::vector<std::string> fznFlags;
int numSols = 1;
std::string parallel;
int fznTimeLimitMilliseconds = 0;
int solverTimeLimitMilliseconds = 0;
bool fznSigint = false;
/// Number of (optimal) solutions to output
bool numOptimal = true;
bool allOptimal = false;
bool fznNeedsPaths = false;
bool fznOutputPassthrough = false;
bool supportsA = false;
bool supportsN = false;
bool supportsF = false;
bool supportsP = false;
bool supportsS = false;
bool supportsR = false;
bool supportsV = false;
bool supportsT = false;
bool supportsI = false;
bool supportsNO = false;
bool supportsAO = false;
bool supportsCpprofiler = false;
std::vector<MZNFZNSolverFlag> fznSolverFlags;
};
class FZNSolverInstance : public SolverInstanceBase {
private:
std::string _fznSolver;
protected:
Model* _fzn;
Model* _ozn;
public:
FZNSolverInstance(Env& env, std::ostream& log, SolverInstanceBase::Options* opt);
~FZNSolverInstance() override;
Status next() override { return SolverInstance::ERROR; }
Status solve() override;
void processFlatZinc() override;
void resetSolver() override;
protected:
static Expression* getSolutionValue(Id* id);
};
class FZNSolverFactory : public SolverFactory {
protected:
SolverInstanceBase* doCreateSI(Env& env, std::ostream& log,
SolverInstanceBase::Options* opt) override;
public:
FZNSolverFactory();
SolverInstanceBase::Options* createOptions() override;
std::string getDescription(SolverInstanceBase::Options* opt = nullptr) override;
std::string getVersion(SolverInstanceBase::Options* opt = nullptr) override;
std::string getId() override;
bool processOption(SolverInstanceBase::Options* opt, int& i, std::vector<std::string>& argv,
const std::string& workingDir = std::string()) override;
void printHelp(std::ostream& os) override;
static void setAcceptedFlags(SolverInstanceBase::Options* opt,
const std::vector<MZNFZNSolverFlag>& flags);
};
} // namespace MiniZinc