107 SCIP_Real maxdistance = 10.0 * sqrt(
SQR(coord[1]-coord[0]) +
SQR(coord[3]-coord[2]));
124 for(
i = 0;
i < n+1; ++
i )
155 xlb =
MIN(coord[2], coord[3]);
156 xub =
MAX(coord[2], coord[3]);
206 SCIP_Real minusone = -1.0;
208 for(
i = 0;
i < n; ++
i )
214 SCIP_Real quadcoefs[7];
240 exprs[0] = expr5; coefs[0] = 1.0;
241 exprs[1] = expr6; coefs[1] = 1.0;
242 exprs[2] = vexpr; coefs[2] = -1.0;
268 quadvars1[0] =
y[
i]; quadvars2[0] =
y[
i]; quadcoefs[0] = 1.0;
269 quadvars1[1] =
y[
i+1]; quadvars2[1] =
y[
i+1]; quadcoefs[1] = 1.0;
270 quadvars1[2] =
x[
i]; quadvars2[2] =
x[
i]; quadcoefs[2] = 1.0;
271 quadvars1[3] =
x[
i+1]; quadvars2[3] =
x[
i+1]; quadcoefs[3] = 1.0;
272 quadvars1[4] =
y[
i]; quadvars2[4] =
y[
i+1]; quadcoefs[4] = -2.0;
273 quadvars1[5] =
x[
i]; quadvars2[5] =
x[
i+1]; quadcoefs[5] = -2.0;
274 quadvars1[6] = v[
i]; quadvars2[6] = v[
i]; quadcoefs[6] = -1.0;
277 SCIP_CALL(
SCIPcreateConsQuadraticNonlinear(
scip, &cons, consname, 0,
NULL,
NULL, 7, quadvars1, quadvars2, quadcoefs, -
SCIPinfinity(
scip), 0.0,
TRUE,
TRUE,
TRUE,
TRUE,
TRUE,
FALSE,
FALSE,
FALSE,
FALSE) );
295 for(
i = 0;
i < n; ++
i )
318#if _POSIX_C_SOURCE < 2
325 stream = popen(
"gnuplot -p",
"w");
332 fputs(
"set terminal dumb\n", stream);
335 for(
i = 0;
i < n+1; ++
i )
337 fputs(
"e\n", stream);
363 SCIPinfoMessage(
scip,
NULL,
"* between A=(%g,%g) and B=(%g,%g) with %d points *\n", coord[2], coord[0], coord[3], coord[1], n);
387 for(
i = 0;
i < n+1; ++
i )
415 if( argc == 4 || argc == 2 )
421 n = strtol(argv[1], &end1, 10);
424 coord[1] = strtof(argv[2], &end2);
425 coord[3] = strtof(argv[3], &end3);
428 if( end1 == argv[1] || ( argc == 4 && ( end2 == argv[2] || end3 == argv[3] ) ) )
430 fprintf(stderr,
"Error: expected real values as arguments.\n");
436 fprintf(stderr,
"Usage: %s [<N> [<y(N)> <x(N)>]]\n", argv[0]);
441 if( coord[0] <= coord[1] )
443 fprintf(stderr,
"Error: expected y(N) < 1.0\n");
int main(int argc, char **argv)
static SCIP_RETCODE setupProblem(SCIP *scip, unsigned int n, SCIP_Real *coord, SCIP_VAR ***xvars, SCIP_VAR ***yvars)
static SCIP_RETCODE runBrachistochrone(unsigned int n, SCIP_Real *coord)
static void visualizeSolutionGnuplot(SCIP *scip, SCIP_SOL *sol, unsigned int n, SCIP_VAR **x, SCIP_VAR **y)
SCIP_RETCODE SCIPaddCoefLinear(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val)
SCIP_RETCODE SCIPcreateConsBasicLinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs)
SCIP_RETCODE SCIPcreateConsBasicNonlinear(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_EXPR *expr, SCIP_Real lhs, SCIP_Real rhs)
SCIP_RETCODE SCIPcreateConsQuadraticNonlinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nlinvars, SCIP_VAR **linvars, SCIP_Real *lincoefs, int nquadterms, SCIP_VAR **quadvars1, SCIP_VAR **quadvars2, SCIP_Real *quadcoefs, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable)
SCIP_RETCODE SCIPcreateExprVar(SCIP *scip, SCIP_EXPR **expr, SCIP_VAR *var, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
SCIP_RETCODE SCIPcreateExprProduct(SCIP *scip, SCIP_EXPR **expr, int nchildren, SCIP_EXPR **children, SCIP_Real coefficient, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
SCIP_RETCODE SCIPcreateExprSum(SCIP *scip, SCIP_EXPR **expr, int nchildren, SCIP_EXPR **children, SCIP_Real *coefficients, SCIP_Real constant, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
SCIP_RETCODE SCIPcreateExprPow(SCIP *scip, SCIP_EXPR **expr, SCIP_EXPR *child, SCIP_Real exponent, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
SCIP_RETCODE SCIPfree(SCIP **scip)
SCIP_RETCODE SCIPcreate(SCIP **scip)
SCIP_RETCODE SCIPaddVar(SCIP *scip, SCIP_VAR *var)
SCIP_RETCODE SCIPaddCons(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateProbBasic(SCIP *scip, const char *name)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
void SCIPprintError(SCIP_RETCODE retcode)
SCIP_RETCODE SCIPsetRealParam(SCIP *scip, const char *name, SCIP_Real value)
SCIP_RETCODE SCIPreleaseCons(SCIP *scip, SCIP_CONS **cons)
SCIP_RETCODE SCIPreleaseExpr(SCIP *scip, SCIP_EXPR **expr)
#define SCIPallocMemoryArray(scip, ptr, num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPfreeMemoryArray(scip, ptr)
SCIP_SOL * SCIPgetBestSol(SCIP *scip)
SCIP_RETCODE SCIPprintSol(SCIP *scip, SCIP_SOL *sol, FILE *file, SCIP_Bool printzeros)
int SCIPgetNSols(SCIP *scip)
SCIP_Real SCIPgetSolOrigObj(SCIP *scip, SCIP_SOL *sol)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
SCIP_RETCODE SCIPsolve(SCIP *scip)
SCIP_RETCODE SCIPprintOrigProblem(SCIP *scip, FILE *file, const char *extension, SCIP_Bool genericnames)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_RETCODE SCIPreleaseVar(SCIP *scip, SCIP_VAR **var)
SCIP_RETCODE SCIPcreateVarBasic(SCIP *scip, SCIP_VAR **var, const char *name, SCIP_Real lb, SCIP_Real ub, SCIP_Real obj, SCIP_VARTYPE vartype)
int SCIPsnprintf(char *t, int len, const char *s,...)
assert(minobj< SCIPgetCutoffbound(scip))
public data structures and miscellaneous methods
SCIP_RETCODE SCIPincludeDefaultPlugins(SCIP *scip)
enum SCIP_Retcode SCIP_RETCODE
@ SCIP_VARTYPE_CONTINUOUS