@@ -188,6 +188,9 @@ class FlatConverter :
188
188
using ConInfo = AbstractConstraintLocation;
189
189
190
190
// / Replace functional expression defining a given variable.
191
+ // / After this, if the arguments are any new expressions,
192
+ // / the original context should be propagated into \a res_var:
193
+ // / PropagateResultOfInitExpr(res_var, ctx);
191
194
template <class FuncConstraint >
192
195
void RedefineVariable (int res_var, FuncConstraint&& fc) {
193
196
assert ( MPD ( HasInitExpression (res_var) ) );
@@ -1634,115 +1637,118 @@ class FlatConverter :
1634
1637
// / 2nd parameter: solver options for this constraint,
1635
1638
// / in case it is accepted by the solver natively and
1636
1639
// / is convertible by us.
1640
+ // / 3rd parameter: reformulation priority (double).
1641
+ // / Can be changed in a derived class by ConstraintCvtPriority().
1642
+ // / NOTE: The reformulation meta-graph should be acyclic #248.
1637
1643
1638
1644
// / Static algebraic cons
1639
1645
STORE_CONSTRAINT_TYPE__NO_MAP (LinConRange,
1640
- " acc:linrange acc:linrng" )
1641
- STORE_CONSTRAINT_TYPE__NO_MAP (LinConLE, " acc:linle" )
1642
- STORE_CONSTRAINT_TYPE__NO_MAP (LinConEQ, " acc:lineq" )
1643
- STORE_CONSTRAINT_TYPE__NO_MAP (LinConGE, " acc:linge" )
1646
+ " acc:linrange acc:linrng" , 5000 )
1647
+ STORE_CONSTRAINT_TYPE__NO_MAP (LinConLE, " acc:linle" , 5100 )
1648
+ STORE_CONSTRAINT_TYPE__NO_MAP (LinConEQ, " acc:lineq" , 5200 )
1649
+ STORE_CONSTRAINT_TYPE__NO_MAP (LinConGE, " acc:linge" , 5300 )
1644
1650
1645
1651
STORE_CONSTRAINT_TYPE__NO_MAP (QuadConRange,
1646
- " acc:quadrange acc:quadrng" )
1647
- STORE_CONSTRAINT_TYPE__NO_MAP (QuadConLE, " acc:quadle" )
1648
- STORE_CONSTRAINT_TYPE__NO_MAP (QuadConEQ, " acc:quadeq" )
1649
- STORE_CONSTRAINT_TYPE__NO_MAP (QuadConGE, " acc:quadge" )
1652
+ " acc:quadrange acc:quadrng" , 4000 )
1653
+ STORE_CONSTRAINT_TYPE__NO_MAP (QuadConLE, " acc:quadle" , 4100 )
1654
+ STORE_CONSTRAINT_TYPE__NO_MAP (QuadConEQ, " acc:quadeq" , 4200 )
1655
+ STORE_CONSTRAINT_TYPE__NO_MAP (QuadConGE, " acc:quadge" , 4300 )
1650
1656
1651
1657
// / Our own functional constraints: LFC, QFC
1652
1658
STORE_CONSTRAINT_TYPE__WITH_MAP (
1653
- LinearFunctionalConstraint, " acc:linfunccon" )
1659
+ LinearFunctionalConstraint, " acc:linfunccon" , 3200 )
1654
1660
STORE_CONSTRAINT_TYPE__WITH_MAP (
1655
- QuadraticFunctionalConstraint, " acc:quadfunccon" )
1661
+ QuadraticFunctionalConstraint, " acc:quadfunccon" , 3100 )
1656
1662
1657
1663
// / Flattened NL expressions
1658
- STORE_CONSTRAINT_TYPE__WITH_MAP (MaxConstraint, " acc:max" )
1659
- STORE_CONSTRAINT_TYPE__WITH_MAP (MinConstraint, " acc:min" )
1660
- STORE_CONSTRAINT_TYPE__WITH_MAP (AbsConstraint, " acc:abs" )
1664
+ STORE_CONSTRAINT_TYPE__WITH_MAP (MaxConstraint, " acc:max" , 1100 )
1665
+ STORE_CONSTRAINT_TYPE__WITH_MAP (MinConstraint, " acc:min" , 1200 )
1666
+ STORE_CONSTRAINT_TYPE__WITH_MAP (AbsConstraint, " acc:abs" , 100 )
1661
1667
STORE_CONSTRAINT_TYPE__WITH_MAP (AndConstraint,
1662
- " acc:and acc:forall" )
1668
+ " acc:and acc:forall" , 2200 )
1663
1669
STORE_CONSTRAINT_TYPE__WITH_MAP (OrConstraint,
1664
- " acc:or acc:exists" )
1670
+ " acc:or acc:exists" , 2300 )
1665
1671
// / Used only for expression output,
1666
1672
// / flat model keeps this in algebraic form
1667
1673
STORE_CONSTRAINT_TYPE__WITH_MAP (
1668
- EquivalenceConstraint, " acc:equiv acc:equivalence" )
1669
-
1670
- STORE_CONSTRAINT_TYPE__WITH_MAP (CondLinConEQ, " acc:condlineq" )
1671
- STORE_CONSTRAINT_TYPE__WITH_MAP (CondLinConLE, " acc:condlinle" )
1672
- STORE_CONSTRAINT_TYPE__WITH_MAP (CondLinConLT, " acc:condlinlt" )
1673
- STORE_CONSTRAINT_TYPE__WITH_MAP (CondLinConGE, " acc:condlinge" )
1674
- STORE_CONSTRAINT_TYPE__WITH_MAP (CondLinConGT, " acc:condlingt" )
1675
-
1676
- STORE_CONSTRAINT_TYPE__WITH_MAP (CondQuadConEQ, " acc:condquadeq" )
1677
- STORE_CONSTRAINT_TYPE__WITH_MAP (CondQuadConLE, " acc:condquadle" )
1678
- STORE_CONSTRAINT_TYPE__WITH_MAP (CondQuadConLT, " acc:condquadlt" )
1679
- STORE_CONSTRAINT_TYPE__WITH_MAP (CondQuadConGE, " acc:condquadge" )
1680
- STORE_CONSTRAINT_TYPE__WITH_MAP (CondQuadConGT, " acc:condquadgt" )
1681
-
1682
- STORE_CONSTRAINT_TYPE__WITH_MAP (NotConstraint, " acc:not" )
1683
- STORE_CONSTRAINT_TYPE__WITH_MAP (DivConstraint, " acc:div" )
1684
- STORE_CONSTRAINT_TYPE__WITH_MAP (IfThenConstraint, " acc:ifthen" )
1685
- STORE_CONSTRAINT_TYPE__WITH_MAP (ImplicationConstraint, " acc:impl" )
1686
- STORE_CONSTRAINT_TYPE__WITH_MAP (AllDiffConstraint, " acc:alldiff" )
1674
+ EquivalenceConstraint, " acc:equiv acc:equivalence" , 2150 )
1675
+
1676
+ STORE_CONSTRAINT_TYPE__WITH_MAP (CondLinConEQ, " acc:condlineq" , 1950 )
1677
+ STORE_CONSTRAINT_TYPE__WITH_MAP (CondLinConLE, " acc:condlinle" , 2050 )
1678
+ STORE_CONSTRAINT_TYPE__WITH_MAP (CondLinConLT, " acc:condlinlt" , 2060 )
1679
+ STORE_CONSTRAINT_TYPE__WITH_MAP (CondLinConGE, " acc:condlinge" , 2070 )
1680
+ STORE_CONSTRAINT_TYPE__WITH_MAP (CondLinConGT, " acc:condlingt" , 2080 )
1681
+
1682
+ STORE_CONSTRAINT_TYPE__WITH_MAP (CondQuadConEQ, " acc:condquadeq" , 1900 )
1683
+ STORE_CONSTRAINT_TYPE__WITH_MAP (CondQuadConLE, " acc:condquadle" , 2000 )
1684
+ STORE_CONSTRAINT_TYPE__WITH_MAP (CondQuadConLT, " acc:condquadlt" , 2010 )
1685
+ STORE_CONSTRAINT_TYPE__WITH_MAP (CondQuadConGE, " acc:condquadge" , 2020 )
1686
+ STORE_CONSTRAINT_TYPE__WITH_MAP (CondQuadConGT, " acc:condquadgt" , 2030 )
1687
+
1688
+ STORE_CONSTRAINT_TYPE__WITH_MAP (NotConstraint, " acc:not" , 2100 )
1689
+ STORE_CONSTRAINT_TYPE__WITH_MAP (DivConstraint, " acc:div" , 600 )
1690
+ STORE_CONSTRAINT_TYPE__WITH_MAP (IfThenConstraint, " acc:ifthen" , 700 )
1691
+ STORE_CONSTRAINT_TYPE__WITH_MAP (ImplicationConstraint, " acc:impl" , 800 )
1692
+ STORE_CONSTRAINT_TYPE__WITH_MAP (AllDiffConstraint, " acc:alldiff" , 200 )
1687
1693
STORE_CONSTRAINT_TYPE__WITH_MAP (NumberofConstConstraint,
1688
- " acc:numberofconst" )
1694
+ " acc:numberofconst" , 1300 )
1689
1695
STORE_CONSTRAINT_TYPE__WITH_MAP (NumberofVarConstraint,
1690
- " acc:numberofvar" )
1691
- STORE_CONSTRAINT_TYPE__WITH_MAP (CountConstraint, " acc:count" )
1692
-
1693
- STORE_CONSTRAINT_TYPE__WITH_MAP (ExpConstraint, " acc:exp" )
1694
- STORE_CONSTRAINT_TYPE__WITH_MAP (ExpAConstraint, " acc:expa acc:expA" )
1695
- STORE_CONSTRAINT_TYPE__WITH_MAP (LogConstraint, " acc:log" )
1696
- STORE_CONSTRAINT_TYPE__WITH_MAP (LogAConstraint, " acc:loga acc:logA" )
1697
- STORE_CONSTRAINT_TYPE__WITH_MAP (PowConstExpConstraint, " acc:powconstexp" )
1698
- STORE_CONSTRAINT_TYPE__WITH_MAP (PowConstraint, " acc:pow" )
1699
- STORE_CONSTRAINT_TYPE__WITH_MAP (SinConstraint, " acc:sin" )
1700
- STORE_CONSTRAINT_TYPE__WITH_MAP (CosConstraint, " acc:cos" )
1701
- STORE_CONSTRAINT_TYPE__WITH_MAP (TanConstraint, " acc:tan" )
1702
- STORE_CONSTRAINT_TYPE__WITH_MAP (AsinConstraint, " acc:asin" )
1703
- STORE_CONSTRAINT_TYPE__WITH_MAP (AcosConstraint, " acc:acos" )
1704
- STORE_CONSTRAINT_TYPE__WITH_MAP (AtanConstraint, " acc:atan" )
1705
- STORE_CONSTRAINT_TYPE__WITH_MAP (SinhConstraint, " acc:sinh" )
1706
- STORE_CONSTRAINT_TYPE__WITH_MAP (CoshConstraint, " acc:cosh" )
1707
- STORE_CONSTRAINT_TYPE__WITH_MAP (TanhConstraint, " acc:tanh" )
1708
- STORE_CONSTRAINT_TYPE__WITH_MAP (AsinhConstraint, " acc:asinh" )
1709
- STORE_CONSTRAINT_TYPE__WITH_MAP (AcoshConstraint, " acc:acosh" )
1710
- STORE_CONSTRAINT_TYPE__WITH_MAP (AtanhConstraint, " acc:atanh" )
1696
+ " acc:numberofvar" , 1350 )
1697
+ STORE_CONSTRAINT_TYPE__WITH_MAP (CountConstraint, " acc:count" , 400 )
1698
+
1699
+ STORE_CONSTRAINT_TYPE__WITH_MAP (ExpConstraint, " acc:exp" , 1000 )
1700
+ STORE_CONSTRAINT_TYPE__WITH_MAP (ExpAConstraint, " acc:expa acc:expA" , 1002 )
1701
+ STORE_CONSTRAINT_TYPE__WITH_MAP (LogConstraint, " acc:log" , 1004 )
1702
+ STORE_CONSTRAINT_TYPE__WITH_MAP (LogAConstraint, " acc:loga acc:logA" , 1006 )
1703
+ STORE_CONSTRAINT_TYPE__WITH_MAP (PowConstExpConstraint, " acc:powconstexp" , 900 )
1704
+ STORE_CONSTRAINT_TYPE__WITH_MAP (PowConstraint, " acc:pow" , 950 ) // -> exp, log
1705
+ STORE_CONSTRAINT_TYPE__WITH_MAP (SinConstraint, " acc:sin" , 1008 )
1706
+ STORE_CONSTRAINT_TYPE__WITH_MAP (CosConstraint, " acc:cos" , 1010 )
1707
+ STORE_CONSTRAINT_TYPE__WITH_MAP (TanConstraint, " acc:tan" , 1012 )
1708
+ STORE_CONSTRAINT_TYPE__WITH_MAP (AsinConstraint, " acc:asin" , 1014 )
1709
+ STORE_CONSTRAINT_TYPE__WITH_MAP (AcosConstraint, " acc:acos" , 1016 )
1710
+ STORE_CONSTRAINT_TYPE__WITH_MAP (AtanConstraint, " acc:atan" , 1018 )
1711
+ STORE_CONSTRAINT_TYPE__WITH_MAP (SinhConstraint, " acc:sinh" , 1020 )
1712
+ STORE_CONSTRAINT_TYPE__WITH_MAP (CoshConstraint, " acc:cosh" , 1022 )
1713
+ STORE_CONSTRAINT_TYPE__WITH_MAP (TanhConstraint, " acc:tanh" , 1024 )
1714
+ STORE_CONSTRAINT_TYPE__WITH_MAP (AsinhConstraint, " acc:asinh" , 1026 )
1715
+ STORE_CONSTRAINT_TYPE__WITH_MAP (AcoshConstraint, " acc:acosh" , 1028 )
1716
+ STORE_CONSTRAINT_TYPE__WITH_MAP (AtanhConstraint, " acc:atanh" , 1030 )
1711
1717
1712
1718
// / No maps for static constraints
1713
1719
STORE_CONSTRAINT_TYPE__NO_MAP (
1714
- IndicatorConstraintLinLE, " acc:indle acc:indlinle" )
1720
+ IndicatorConstraintLinLE, " acc:indle acc:indlinle" , 2460 )
1715
1721
STORE_CONSTRAINT_TYPE__NO_MAP (
1716
- IndicatorConstraintLinEQ, " acc:indeq acc:indlineq" )
1722
+ IndicatorConstraintLinEQ, " acc:indeq acc:indlineq" , 2450 )
1717
1723
STORE_CONSTRAINT_TYPE__NO_MAP (
1718
- IndicatorConstraintLinGE, " acc:indge acc:indlinge" )
1724
+ IndicatorConstraintLinGE, " acc:indge acc:indlinge" , 2470 )
1719
1725
STORE_CONSTRAINT_TYPE__NO_MAP (
1720
- IndicatorConstraintQuadLE, " acc:indquadle" )
1726
+ IndicatorConstraintQuadLE, " acc:indquadle" , 2410 )
1721
1727
STORE_CONSTRAINT_TYPE__NO_MAP (
1722
- IndicatorConstraintQuadEQ, " acc:indquadeq" )
1728
+ IndicatorConstraintQuadEQ, " acc:indquadeq" , 2400 )
1723
1729
STORE_CONSTRAINT_TYPE__NO_MAP (
1724
- IndicatorConstraintQuadGE, " acc:indquadge" )
1730
+ IndicatorConstraintQuadGE, " acc:indquadge" , 2420 )
1725
1731
STORE_CONSTRAINT_TYPE__WITH_MAP (PLConstraint,
1726
- " acc:pl acc:pwl acc:piecewise" )
1727
- STORE_CONSTRAINT_TYPE__NO_MAP (SOS1Constraint, " acc:sos1" )
1728
- STORE_CONSTRAINT_TYPE__NO_MAP (SOS2Constraint, " acc:sos2" )
1732
+ " acc:pl acc:pwl acc:piecewise" , 1500 )
1733
+ STORE_CONSTRAINT_TYPE__NO_MAP (SOS1Constraint, " acc:sos1" , 1600 )
1734
+ STORE_CONSTRAINT_TYPE__NO_MAP (SOS2Constraint, " acc:sos2" , 1700 )
1729
1735
STORE_CONSTRAINT_TYPE__NO_MAP (
1730
- ComplementarityLinear, " acc:compl acc:compllin" )
1736
+ ComplementarityLinear, " acc:compl acc:compllin" , 350 )
1731
1737
STORE_CONSTRAINT_TYPE__NO_MAP (
1732
- ComplementarityQuadratic, " acc:complquad" )
1738
+ ComplementarityQuadratic, " acc:complquad" , 300 )
1733
1739
STORE_CONSTRAINT_TYPE__NO_MAP (
1734
- QuadraticConeConstraint, " acc:quadcone" )
1740
+ QuadraticConeConstraint, " acc:quadcone" , 3002 )
1735
1741
STORE_CONSTRAINT_TYPE__NO_MAP (
1736
- RotatedQuadraticConeConstraint, " acc:rotatedquadcone" )
1742
+ RotatedQuadraticConeConstraint, " acc:rotatedquadcone" , 3001 )
1737
1743
STORE_CONSTRAINT_TYPE__NO_MAP (
1738
- PowerConeConstraint, " acc:powercone" )
1744
+ PowerConeConstraint, " acc:powercone" , 3000 )
1739
1745
STORE_CONSTRAINT_TYPE__NO_MAP (
1740
- ExponentialConeConstraint, " acc:expcone" )
1746
+ ExponentialConeConstraint, " acc:expcone" , 3010 )
1741
1747
STORE_CONSTRAINT_TYPE__NO_MAP (
1742
- GeometricConeConstraint, " acc:geomcone" )
1748
+ GeometricConeConstraint, " acc:geomcone" , 3020 )
1743
1749
// / Store UEncConstr
1744
1750
STORE_CONSTRAINT_TYPE__NO_MAP (
1745
- UnaryEncodingConstraint, " acc:uenc" )
1751
+ UnaryEncodingConstraint, " acc:uenc" , 1800 )
1746
1752
// / Dummy conversion for UEncConstr
1747
1753
Context Convert (const UnaryEncodingConstraint& )
1748
1754
{ return Context::CTX_ROOT; }
@@ -1753,22 +1759,22 @@ class FlatConverter :
1753
1759
1754
1760
// //////////////////// NL constraints & expressions ///////////////////////
1755
1761
STORE_CONSTRAINT_TYPE__NO_MAP (
1756
- NLConstraint, " acc:nlcon acc:nlalgcon" )
1762
+ NLConstraint, " acc:nlcon acc:nlalgcon" , 10000 )
1757
1763
STORE_CONSTRAINT_TYPE__NO_MAP (
1758
- NLAssignEQ, " acc:nlassigneq" )
1764
+ NLAssignEQ, " acc:nlassigneq" , 10100 )
1759
1765
STORE_CONSTRAINT_TYPE__NO_MAP (
1760
- NLAssignLE, " acc:nlassignle" )
1766
+ NLAssignLE, " acc:nlassignle" , 10200 )
1761
1767
STORE_CONSTRAINT_TYPE__NO_MAP (
1762
- NLAssignGE, " acc:nlassignge" )
1768
+ NLAssignGE, " acc:nlassignge" , 10300 )
1763
1769
1764
1770
STORE_CONSTRAINT_TYPE__NO_MAP (
1765
- NLLogical, " acc:nllogcon acc:nllogical" )
1771
+ NLLogical, " acc:nllogcon acc:nllogical" , 12000 )
1766
1772
STORE_CONSTRAINT_TYPE__NO_MAP (
1767
- NLReifEquiv, " acc:nlreifequiv" )
1773
+ NLReifEquiv, " acc:nlreifequiv" , 12100 )
1768
1774
STORE_CONSTRAINT_TYPE__NO_MAP (
1769
- NLReifImpl, " acc:nlreifimpl" )
1775
+ NLReifImpl, " acc:nlreifimpl" , 12200 )
1770
1776
STORE_CONSTRAINT_TYPE__NO_MAP (
1771
- NLReifRimpl, " acc:nlreifrimpl" )
1777
+ NLReifRimpl, " acc:nlreifrimpl" , 12300 )
1772
1778
1773
1779
1774
1780
protected:
0 commit comments