@@ -1375,6 +1375,15 @@ SCIP_RETCODE createCons(
1375
1375
return SCIP_INVALIDCALL;
1376
1376
}
1377
1377
1378
+
1379
+ if( isnan(lhs) || isnan(rhs) )
1380
+ {
1381
+ SCIPerrorMessage("%s hand side of nonlinear constraint <%s> is nan\n",
1382
+ isnan(lhs) ? "left" : "right", name);
1383
+ return SCIP_INVALIDDATA;
1384
+ }
1385
+
1386
+
1378
1387
/* create constraint data */
1379
1388
SCIP_CALL( SCIPallocClearBlockMemory(scip, &consdata) );
1380
1389
@@ -12856,10 +12865,30 @@ SCIP_RETCODE SCIPcreateConsQuadraticNonlinear(
12856
12865
{
12857
12866
SCIP_CONSHDLR* conshdlr;
12858
12867
SCIP_EXPR* expr;
12868
+ int i;
12859
12869
12860
12870
assert(nlinvars == 0 || (linvars != NULL && lincoefs != NULL));
12861
12871
assert(nquadterms == 0 || (quadvars1 != NULL && quadvars2 != NULL && quadcoefs != NULL));
12862
12872
12873
+ /* check data for infinity or nan values */
12874
+ for( i = 0; i < nlinvars; ++i )
12875
+ {
12876
+ if( !SCIPisFinite(lincoefs[i]) || SCIPisInfinity(scip, lincoefs[i]) )
12877
+ {
12878
+ SCIPerrorMessage("Infinite or nan coefficient of variable %s in quadratic constraint %s\n", SCIPvarGetName(linvars[i]), name);
12879
+ return SCIP_INVALIDDATA;
12880
+ }
12881
+ }
12882
+ for( i = 0; i < nquadterms; ++i )
12883
+ {
12884
+ if( !SCIPisFinite(quadcoefs[i]) || SCIPisInfinity(scip, quadcoefs[i]) )
12885
+ {
12886
+ SCIPerrorMessage("Infinite or nan coefficient of term %s*%s in quadratic constraint %s\n", SCIPvarGetName(quadvars1[i]), SCIPvarGetName(quadvars2[i]), name);
12887
+ return SCIP_INVALIDDATA;
12888
+ }
12889
+ }
12890
+ /* lhs and rhs will be checked in createCons */
12891
+
12863
12892
/* get nonlinear constraint handler */
12864
12893
conshdlr = SCIPfindConshdlr(scip, CONSHDLR_NAME);
12865
12894
if( conshdlr == NULL )
@@ -12939,6 +12968,37 @@ SCIP_RETCODE SCIPcreateConsBasicSOCNonlinear(
12939
12968
12940
12969
assert(vars != NULL || nvars == 0);
12941
12970
12971
+ /* check values for infinity or nan */
12972
+ for( i = 0; i < nvars; ++i )
12973
+ {
12974
+ if( !SCIPisFinite(coefs[i]) || SCIPisInfinity(scip, coefs[i]) )
12975
+ {
12976
+ SCIPerrorMessage("Second-order cone term with infinite or nan coefficient of variable %s in nonlinear constraint %s\n", SCIPvarGetName(vars[i]), name);
12977
+ return SCIP_INVALIDDATA;
12978
+ }
12979
+ if( offsets != NULL && (!SCIPisFinite(offsets[i]) || SCIPisInfinity(scip, coefs[i])) )
12980
+ {
12981
+ SCIPerrorMessage("Second-order cone term with infinite or nan offset for variable %s in nonlinear constraint %s\n", SCIPvarGetName(vars[i]), name);
12982
+ return SCIP_INVALIDDATA;
12983
+ }
12984
+ }
12985
+ if( !SCIPisFinite(constant) || SCIPisInfinity(scip, constant) )
12986
+ {
12987
+ SCIPerrorMessage("Second-order cone constant with infinite or nan value in nonlinear constraint %s\n", name);
12988
+ return SCIP_INVALIDDATA;
12989
+ }
12990
+ if( !SCIPisFinite(rhscoeff) || SCIPisInfinity(scip, rhscoeff) )
12991
+ {
12992
+ SCIPerrorMessage("Infinite or nan coefficient of right hand side variable in second-order cone constraint %s\n", name);
12993
+ return SCIP_INVALIDDATA;
12994
+ }
12995
+ if( !SCIPisFinite(rhsoffset) || SCIPisInfinity(scip, rhsoffset) )
12996
+ {
12997
+ SCIPerrorMessage("Infinite or nan right hand side offset in second-order cone constraint %s\n", name);
12998
+ return SCIP_INVALIDDATA;
12999
+ }
13000
+ /* lhs and rhs will be checked in createCons */
13001
+
12942
13002
SCIP_CALL( SCIPcreateExprSum(scip, &lhssum, 0, NULL, NULL, constant, NULL, NULL) ); /* gamma */
12943
13003
for( i = 0; i < nvars; ++i )
12944
13004
{
@@ -13009,6 +13069,24 @@ SCIP_RETCODE SCIPcreateConsBasicSignpowerNonlinear(
13009
13069
assert(x != NULL);
13010
13070
assert(z != NULL);
13011
13071
13072
+ if( !SCIPisFinite(exponent) )
13073
+ {
13074
+ SCIPerrorMessage("exponent in nonlinear signpower constraint <%s> is infinite or nan\n", name);
13075
+ return SCIP_INVALIDDATA;
13076
+ }
13077
+
13078
+ if( !SCIPisFinite(xoffset) )
13079
+ {
13080
+ SCIPerrorMessage("argument offset in nonlinear signpower constraint <%s> is infinite or nan\n", name);
13081
+ return SCIP_INVALIDDATA;
13082
+ }
13083
+
13084
+ if( !SCIPisFinite(zcoef) )
13085
+ {
13086
+ SCIPerrorMessage("coefficient of linear variable in nonlinear signpower constraint <%s> is infinite or nan\n", name);
13087
+ return SCIP_INVALIDDATA;
13088
+ }
13089
+
13012
13090
SCIP_CALL( SCIPcreateExprVar(scip, &xexpr, x, NULL, NULL) );
13013
13091
if( xoffset != 0.0 )
13014
13092
{
0 commit comments