Skip to content

Instantly share code, notes, and snippets.

@rschwarz
Created February 24, 2019 18:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rschwarz/f5781e1fe17adb0a89d9b5b13a049de7 to your computer and use it in GitHub Desktop.
Save rschwarz/f5781e1fe17adb0a89d9b5b13a049de7 to your computer and use it in GitHub Desktop.
Try to reproduce non-deterministic behavior with pure C code calling SCIP.
#include "scip/scip.h"
#include "scip/scipdefplugins.h"
int main() {
SCIP* scip = NULL;
SCIP_CALL( SCIPcreate(&scip) );
SCIP_CALL( SCIPincludeDefaultPlugins(scip) );
SCIP_CALL( SCIPcreateProbBasic(scip, "lp") );
// min. -x
// s.t. 2x + y <= 1.5
// x, y >= 0
SCIP_VAR* x = NULL;
SCIP_VAR* y = NULL;
SCIP_CALL( SCIPcreateVarBasic(scip, &x, "x", 0.0, SCIPinfinity(scip), -1.0, SCIP_VARTYPE_CONTINUOUS) );
SCIP_CALL( SCIPaddVar(scip, x) );
SCIP_CALL( SCIPcreateVarBasic(scip, &y, "y", 0.0, SCIPinfinity(scip), 0.0, SCIP_VARTYPE_CONTINUOUS) );
SCIP_CALL( SCIPaddVar(scip, y) );
// SUM
// PRODUCT
// CONST (2.0)
// VARIDX (x = 0)
// VARIDX (y = 1)
SCIP_EXPR* constant = NULL;
SCIP_CALL( SCIPexprCreate( SCIPblkmem(scip), &constant, SCIP_EXPR_CONST, 2.0) );
SCIP_EXPR* varx = NULL;
SCIP_CALL( SCIPexprCreate( SCIPblkmem(scip), &varx, SCIP_EXPR_VARIDX, 0) );
SCIP_EXPR* vary = NULL;
SCIP_CALL( SCIPexprCreate( SCIPblkmem(scip), &vary, SCIP_EXPR_VARIDX, 1) );
SCIP_EXPR* product = NULL;
SCIP_EXPR* product_children[2] = {constant, varx};
SCIP_CALL( SCIPexprCreate( SCIPblkmem(scip), &product, SCIP_EXPR_PRODUCT, 2, product_children) );
SCIP_EXPR* sum = NULL;
SCIP_EXPR* sum_children[2] = {product, vary};
SCIP_CALL( SCIPexprCreate(SCIPblkmem(scip), &sum, SCIP_EXPR_SUM, 2, sum_children) );
SCIP_EXPRTREE* tree = NULL;
SCIP_CALL( SCIPexprtreeCreate(SCIPblkmem(scip), &tree, sum, 2, 0, NULL) );
SCIP_VAR* vars[2] = {x, y};
SCIP_CALL( SCIPexprtreeSetVars(tree, 2, vars) );
SCIP_CONS* cons = NULL;
SCIP_CALL( SCIPcreateConsBasicNonlinear(scip, &cons, "nonlin", 0, NULL, NULL,
1, &tree, NULL, -SCIPinfinity(scip), 1.5) );
SCIP_CALL( SCIPaddCons(scip, cons) );
SCIP_CALL( SCIPexprtreeFree(&tree) );
SCIP_CALL( SCIPprintOrigProblem(scip, NULL, "cip", FALSE) );
SCIP_CALL( SCIPsolve(scip) );
SCIP_CALL( SCIPprintSol(scip, SCIPgetBestSol(scip), NULL, FALSE) );
SCIP_CALL( SCIPreleaseCons(scip, &cons) );
SCIP_CALL( SCIPreleaseVar(scip, &y) );
SCIP_CALL( SCIPreleaseVar(scip, &x) );
SCIP_CALL( SCIPfree(&scip) );
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment