Модель FICO xpress не дает ожидаемого ответа - PullRequest
0 голосов
/ 04 мая 2020

Я здесь с проблемой. мы работаем над чем-то, чтобы оптимизировать конкретную проблему c, но мы не получаем ожидаемых решений. Причина, по которой я обращаюсь к вам за помощью, заключается в том, что мы пытались в течение нескольких дней, не принося удовлетворительных результатов. Ниже я опубликую всю проблему, которая на французском языке, и программу, которую мы уже сделали. Мы благодарны за любую помощь, которую вы можете оказать.

'model Electrardennes
uses "mmxprs", "mmsheet"; !gain access to the Xpress-Optimizer solver and Excel
setparam("XPRS_VERBOSE",true)
setparam("XPRS_MAXTIME",60)
declarations
    !SETS
  NH=24;
  SH=1..NH;
  !PARAMETERS
  VolAmontMin=500000;
  VolAmontMax=8000000;
  VolAmontIn=4000000;
  VolAvalMin=200000;
  VolAvalMax=4000000;
  VolAvalIn=3500000;
  TurbMax=500000;
  PompMax=720000;
  FluxMin=36000;
  VarMax=576000;
  P_A :array(SH) of integer;
  P_Prix :array(SH) of integer;
    !VARIABLES
    x:array(SH) of mpvar;           !turbinage
    m:array(SH) of mpvar;           !pompage
    d:array(SH) of mpvar;           !délestage amont/aval
    b:array(SH) of mpvar;           !volume aval
    h:array(SH) of mpvar;           !volume amont
    f:array(SH) of mpvar;           !délestage aval/rivière
    z:array(SH) of mpvar;           !variation turbinage
    y:array(SH) of mpvar;           !variation délestage amont/aval
    v:array(SH) of mpvar;           !variation délestage aval/rivière
        !Printable Solutions
    printx:array(SH) of real;
    printm:array(SH) of real;
    printd:array(SH) of real;
    printh:array(SH) of real;
    printb:array(SH) of real;
    printf:array(SH) of real;
    printz:array(SH) of real;
    printy:array(SH) of real;
    printv:array(SH) of real;
    !OBJECTIVE
    MaxProfit:linctr;                   !OBJ
    !CONSTRAINTS
    CResAval:linctr;
    CResAmont:linctr;
    CVarMax:linctr;
end-declarations
! Initialization Data from Excel
initializations from "mmsheet.excel:noindex;elctradennes.xlsx"
    P_A as "[Feuil1$B3:Y3]"
    P_Prix as "[Feuil1$B4:Y4]"
end-initializations
! OBJ : max profit
MaxProfit := (0.0001*sum(t in SH) P_Prix(t)*x(t) ) - (0.00013*sum(t in SH) P_Prix(t)*m(t) );
! CONSTRAINTS
! Variables domain
forall(t in SH) h(t)>= VolAmontMin
forall(t in SH) h(t)<= VolAmontMax
forall(t in SH) b(t)>= VolAvalMin
forall(t in SH) b(t)<= VolAvalMax
forall(t in SH) x(t)<= TurbMax
forall(t in SH) x(t)>=0;
forall(t in SH) m(t)<= PompMax
forall(t in SH) m(t)>=0;
forall(t in SH) f(t)>= FluxMin
b(23)>=3500000
h(23)+b(23)+P_A(23)=7500000
h(24)=4000000
b(24)=3500000
x(24)=0
d(24)=0
!conservation reservoirs
forall(t in SH) if t=1 then
3500000 +x(t) -f(t) -m(t) +d(t)=b(t)
else CResAval := b(t-1)  +x(t) +f(t) -m(t) -d(t) =b(t)
end-if
forall(t in SH) if t=1 then
4000000 +P_A(t) -x(t) -d(t) +m(t) =h(t)
else CResAmont := h(t-1) +P_A(t) -x(t) -f(t) +m(t) =h(t)
end-if
! variation max
forall(t in SH) do
  if t=1 then
   x(t) +d(t) <= VarMax
  else
   z(t)= (x(t-1)-x(t))
   y(t)= (d(t-1)-d(t))
   v(t)=(f(t-1)-f(t))
   z(t)+y(t) +v(t) <= VarMax
  end-if
end-do
! RUN OPTIMIZATION
maximize(MaxProfit)
! PRINT SOLUTIONS
! Save solutions into constants
forall(t in SH) printh(t) := getsol(h(t));
forall(t in SH) printb(t) := getsol(b(t));
forall(t in SH) printx(t) := getsol(x(t));
forall(t in SH) printm(t) := getsol(m(t));
forall(t in SH) printd(t) := getsol(d(t));
forall(t in SH) printf(t) := getsol(f(t));
forall(t in SH) printz(t) := getsol(z(t));
forall(t in SH) printy(t) := getsol(y(t));
! Print in Excel
initializations to "mmsheet.excel:noindex;elctradennes.xlsx"
  printh as "[feuil2$B6:Y6]"
  printb as "[feuil2$B7:Y7]"
  printx as "[feuil2$B8:Y8]"
  printm as "[feuil2$B9:Y9]"
  printd as "[feuil2$B10:Y10]"
  printf as "[feuil2$B11:Y11]"
  printz as "[feuil2$B12:Y12]"
  printy as "[feuil2$B13:Y13]"
  printv as "[feuil2$B14:Y14]"
end-initializations
end-model'

La soci´et´e Electrardennes g ere un barrage hydro´electrique en Ardennes. Jusqu’ настоящий, самый лучший Джекки, l'ing´enieur de production «Свернуть все вопросы планирования и организации работ». Mais Jacky 's Approche de la Pension и Levcteur Trouve Abovele De Disposer D'un Otil Inmacatika D'Aide a la d´ecision pour effectuer cette planification cruciale pour l’entreprise. La gestion du barrage hydro-´electrique suit un cycle jour-nuit : l’eau est pomp´ee durant la nuit lorsque le prix de l’´electricit´e est faible est restitu´ee durant les heures de pointe. Votre installation comporte deux barrages et donc deux r´eservoirs : le r´eservoir amont et le r´eservoir aval. Grˆace Специальная услуга, очень хорошая оценка и оценка ere qui alimente l’installation, de la quantit´e des eaux de pluie et de ruissellement : at vous donne en m количественная оценка расходов на охрану за пределами США (см. таблицу 1 для примера). Объем запасов до минимума составляет не менее 500 000 м3 и не более 8 000 000 м3, средняя стоимость не менее 200 000 м3 и не более 4 000 000 м3. Vous pouvez a tout instant envoyer un certain flux d’eau du barrage amont vers le r´eservoir aval via la turbine, et produire une certaine quantit´e d’´electricit´e. La turbine produit 0, 0001 MWh par m3 d’eau et a une puissance maximale de 50MW. Autrement dit, maximum 500 000 m3 d’eau peuvent passer par la turbine en une heure. Vous pouvez ´egalement d´elester de l’eau sans passer par la turbine. Vous contrˆolez aussi le flux d’eau qui s’´ecoule du r´eservoir aval vers la rivi ere a travers le second barrage (ce barrage ne produit pas d’´electricit´e). Mais vous ne pouvez jamais ass echer la rivi ere compl etement: минимальное значение минимальной 10 м3 в секунду. Вы можете найти лучший способ создания водохранилища в сравнении с водохранилищем. La pompe consomme 0, 00013 МВтч в м3 д.д. и неисчислимая максимальная стоимость в 200 м3 в.д. Le le 'elestage и le turinage se font a l’aide de vannes qui ne peuvent se refermer instantan´ement. La variation maximale en une heure est de 576 000 m3/h. Vous connaissez ´egalement le prix de gros de l’´electricit´e heure par heure (pt est le prix en euros par MWh durant l’heure t, voir Table 1 pour un exemple). Votre directeur vous demande de d´evelopper un outil d’aide a la décision for ’thetablir chaque jour leplan, посвященный операциям помпезности, turinage и d'elestage for le lendemain. Pour aujourd'hui, vous estimez que vous aurez a minuit 3 500 000 m3 d’eau dans le r´eservoir aval et 4 000 000 m3 d’eau dans le r´eservoir amont. N’oubliez pas que vous devrez continuer votre activit´e le jour d’apr es. Nous Supposerons не c Que Les Niveaux D'Eau De Chaque R'e водохранилище (a leur valeur de d´epart (mˆeme valeur минута). Вы можете сэкономить время и деньги на турбинах или дорогах, начиная с 23 часов и до конца. t 1 2 3 4 5 6 7 8 9 10 11 12 при 50 55 55 50 60 80 100 110 105 100 80 80 пт 25 23 22 20 32 41 80 105 80 65 65 62 т 13 14 15 16 17 18 19 20 21 22 23 24 at 70 70 60 60 50 50 50 45 45 45 45 45 pt 63 70 85 90 91 85 65 50 43 35 31 28 Таблица 1 - «Пример без досье на 24 часа». PS a propos des unit´es : Dans le domaine de la production d’´electricit´e, une puissance s’exprime en M´egaWatt (MW) et mesure la quantit´e d’´energie produite ou consomm´ee par seconde (et est donc un flux d’´energie). Une quantit´e d’´energie s’exprime en M´egaWatt-heure (MWh) et correspond в количественном выражении ie продукция или стандартная установка для установки на подвесную подвеску MW. Вопросы 1. Все, что требуется, - это требование донора и модератора, его решение и решение. 2. Удовлетворение потребностей и преимуществ, а также эффективный инвестиционный вклад в развитие водохранилища. Pouvez-vous l'aider a estimer quelle augmentation serait ad´equate et выгодно ли? 3. Dans les faits, le rendement de la turine уменьшить линейную пролет c hauteur d'eau dans le barrage. Комментировать переходник для модератора для работы в сети? 4. En pratique, Les pr´evisions de plu ie и ruissellement и de prix horaire de l'´lectricit´e, ne sont jamais Parfaites. Комментировать sugg´ereriez-vous d'utiliser votre outil pour tenir compte de ces вариации в течение длительного времени? Выступая в роли малины, и других, в первую очередь, за критику и справедливость в финале. Вот и все, что нужно для получения информации. Vous devriez ´egalement faire vos propres рекомендации.

1 Ответ

0 голосов
/ 05 мая 2020

Прежде всего, данные не предоставлены, и проблема не ясна. Но я могу перечислить основные проблемы, которые я наблюдаю:

Во-первых, есть две петли Форала, идущие по нескольким строкам, и у них нет дел и конца. Во-вторых, у вас есть ограничения CresAval и CResAmont, применяемые ко всем t = 2..24, но они определены как linctr. Они должны быть массивом linctr, и вы должны индексировать их. В их текущей форме у вас есть только одно ограничение вместо 23.

Таким образом, объявления должны быть такими:

CResAval:array(SH) of linctr
CResAmont:array(SH) of linctr

Циклы должны быть такими:

forall(t in SH) do
    if t=1 then
        CResAval(t) := 3500000 +x(t) -f(t) -m(t) +d(t)=b(t)
    else 
        CResAval(t) := b(t-1)  +x(t) +f(t) -m(t) -d(t) =b(t)
    end-if
end-do
forall(t in SH) do
    if t=1 then
        CResAmont(t) := 4000000 +P_A(t) -x(t) -d(t) +m(t) =h(t)
    else 
        CResAmont(t) := h(t-1) +P_A(t) -x(t) -f(t) +m(t) =h(t)
    end-if
end-do

В качестве хорошей практики кодирования всегда используйте неявную опцию для просмотра ваших ошибок. Итак:

options noimplicit
...