locked
NLP problem how to change to make it LP RRS feed

  • Discussion générale

  • Hi!

    I'm a very beginner with Optimization problem and i started to used solverfoundation very recently.

    Sorry for english too! I try to explain my problem.

    I have a demand for a product with a certain quantity Q, I have to produce a production plan for this demand

    A product can be composed with resources r1, r2, with some coefficient c1, c2 as resource usage respectively, with some coefficient scenarios like below , suppose I have 3 scenarios

    Scenario

    1)       c1=0.50 , c2=0.50

    2)       c2=0.25, c2=0.75

    3)       c3=0.75,c2=0.26

    These scenarios are mutually exclusive.

    For instance , if the production for period T , P(T)=10

    For Scenario 2)  Usage of Resource r1 = 10*0.25=2.5   , and r2=10*0.75=7.5

    Resource has availability for each period

    My problem is that due to my model , I have a NLP,  how can I change the model to make It LP ?  I try to lookup with SOS1 but I’m not really experienced with it.

    here is my OML model.

    Model[
      Parameters[
        Sets[Integers[0, Infinity]],
        RessourceSet,
        VarianteSet,
        PeriodeSet
      ],
      Parameters[
        Reals[0, Infinity],
        NomenclatureVarPar[RessourceSet, VarianteSet],
        DispoPar[RessourceSet, PeriodeSet]
      ],
      Decisions[
        Reals[0, Infinity],
        DemandeDecision[PeriodeSet]
      ],
      Decisions[
        Integers[0, 1],
        ActivationDecision[VarianteSet, PeriodeSet]
      ],
      Constraints[
        DemandeConstr -> Sum[
          {iter1, PeriodeSet},
          DemandeDecision[iter1]
        ] <= 1000,
        ConstrRessource -> Foreach[
          {iter2, PeriodeSet},
          Foreach[
            {iter3, RessourceSet},
            Foreach[
              {iter4, VarianteSet},
              (DemandeDecision[iter2] * ActivationDecision[iter4, iter2]) * NomenclatureVarPar[iter3, iter4] <= DispoPar[iter3, iter2]
            ]
          ]
        ],
        ActivationConstr -> Foreach[
          {iter5, PeriodeSet},
          Sum[
            {iter6, VarianteSet},
            If[ActivationDecision[iter6, iter5], 1, 0]
          ] == 1
        ]
      ],
      Goals[
        Maximize[
          SatisfactionGoal -> Annotation[Sum[
            {iter7, PeriodeSet},
            DemandeDecision[iter7]
          ], "order", 0]
        ]
      ]
    ]
    

    Thanks for any help

    Willy

    • Type modifié Ciprian Duduiala lundi 21 novembre 2011 08:52 pas en français
    • Déplacé Ciprian Duduiala lundi 21 novembre 2011 08:52 pas en français (Origine :Développement .NET (en général))
    jeudi 17 novembre 2011 14:52

Toutes les réponses