how to code the position of last element in a set

Archive of Gamsworld Google Group
Archiver
User
User
Posts: 7876
Joined: 7 years ago

Re: how to code the position of last element in a set

Post by Archiver »


hi Renger,

thank you so much, you are my god.

best regards

Yu Li
在 2016年1月25日,12:33,Renger van Nieuwkoop 写道:

> Hi Yu
>
> You can the iterations used to solve a model by storing yourmodelname.iterusd in a parameter.
>
> e.g.
> model test /all/;
> solve test…
> parameter iterationsused;
> iterationsused = test.iterusd;
> Cheers
>
> Renger
>
> From: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com]
> Sent: Freitag, 22. Januar 2016 18:59
> To: gamsworld@googlegroups.com
> Subject: Re: how to code the position of last element in a set
>
> hi Renger,
>
> can you please help me again, how can i write the code for output the number of Iteration for some certain model, is there an option for this or some easy way?
>
> Thank you!
>
> yu
> 在 2016年1月20日,10:56,Renger van Nieuwkoop 写道:
>
>
> Yes, it should be.
> Cheers
> Renger
>
> From: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com]
> Sent: Mittwoch, 20. Januar 2016 09:49
> To: gamsworld@googlegroups.com
> Subject: Re: how to code the position of last element in a set
>
> hi Renger,
>
> thank you for you help, but i don’t unterstand , why hier is ord(i)
> Best regards
>
> Yu
> 在 2016年1月19日,16:25,Renger van Nieuwkoop 写道:
>
>
>
> NB5(i,l)$(ord(l)>1 and ord(i) Cheers
> Renger
>
> From: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com]
> Sent: Dienstag, 19. Januar 2016 16:15
> To: gamsworld@googlegroups.com
> Subject: Re: how to code the position of last element in a set
>
> hi Renger,
>
> I want to defind the order of the element. I show you my example:
>
>
> my code:
>
> NB5(i,l)$(ord(l)>1 and ord(l) NB6(i,l)$(ord(l)>1 and ord(l)
> In there 1 ist the number of order for the first element, is the order number for the last one.
>
> some advice. Thank you!
>
> Best regards
>
> Yu
> 在 2016年1月19日,15:58,Renger van Nieuwkoop 写道:
>
>
>
>
> Hi Yu
> Use card(i) which will give you the cardinality of the set (the number of elements)
> Cheers
> Renger
>
> From: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com] On Behalf Of Yu Li
> Sent: Dienstag, 19. Januar 2016 15:14
> To: gamsworld
> Subject: how to code the position of last element in a set
>
> Hallo,
>
> the position for the first element in a set we can code like this: ord(i)=1, how to code the position for the last one?
>
> Thanks in advance.
>
> Yu
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.
>
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.
>
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.
>
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.

--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.
Archiver
User
User
Posts: 7876
Joined: 7 years ago

Re: how to code the position of last element in a set

Post by Archiver »


hi Renger,

I attach my Codes, i have already put the Option in my codes, but it does’t work.
I want to count the total iteration for model Relaxation within the iteration what i defined( 50iterations).
Cound you help me?

best regards

Yu Li


*Subgradientenverfahren für Stufenrabatten
$eolcom //
sets

i Lieferanten /L1*L4/
l Rabattstufen /R1*R4/ ;
alias(i,ii);

Table P(i,l) Preis

R1 R2 R3 R4
L1 50 48 45 40
L2 48 45 43 40
L3 49 45 44 41
L4 47 44 40 37;

Table QU(i,l) Untergrenzen von Rabattstufe

R1 R2 R3 R4
L1 30 60 100 200
L2 40 80 120 220
L3 30 70 130 210
L4 20 40 60 150;

Table QO(i,l) Obergrenzen von Rabattstufe

R1 R2 R3 R4
L1 60 100 200 10000
L2 80 120 220 10000
L3 70 130 210 10000
L4 40 60 150 10000;



Parameters

QM(i) maximale Lieferraten

/L1 28
L2 20
L3 15
L4 30/

K(i) fixe Lieferkosten

/L1 120
L2 110
L3 115
L4 110/

lambda(i) Lagrange-Multiplikatoren

h(i,l) Lagerungskostensätze ;

Scalars d Rest-Bedarf pro Periode
orig_d ursprünglicher Bedarf pro Periode /35/
lz Lagerzinssatz /0.03/;

Variables

Lagrange Wert der Lagrange-Funktion
q(i,l) Bestellmenge
sq gesamte Bestellmenge
y(i,l) binaere Indikatorvariable fuer q>0 ;

sq.lo = 1; // zur Vermeidung numerischer Instabilität


Positive variable q;
Binary variable y;

Parameter flag(i) 1 wenn Lieferant i noch untersucht wird ;
flag(i)=1;

Equations
LR Definition Lagrange-Funktion
NB1 Bedarfdsrestriktion
NB2(i,l) Untergrenze von Bestellmenge
NB3(i,l) Obergrenze von Bestellmenge
NB4(i) Eindeutigkeit ;

LR.. Lagrange =e= sum((i,l)$flag(i), p(i,l)*q(i,l)*d/sq + h(i,l)* q(i,l)/2 + K(i)*y(i,l)*d/sq);
NB1.. sq =e= sum((i,l)$flag(i), q(i,l));
NB2(i,l)$flag(i).. q(i,l) =g= QU(i,l)*y(i,l) ;
NB3(i,l)$flag(i).. q(i,l) =l= QO(i,l)*y(i,l) ;
NB4(i)$flag(i).. sum(l, y(i,l)) =l= 1 ;

Model relaxation /LR, NB1, NB2, NB3, NB4/ ;

Set Iteration /iter1*iter50/;

Scalars end zeigt an ob Heuristik beendet ist /0/
converged zeigt an ob Subgradientenverfahren konvergiert ist
epsilon Toleranz für Abbruch des Subgradientenverfahrens /1/
sigma Schrittweite
sigma_hat Anfangswert der Schrittweite /1/ ;

Parameter alpha(i) Liefermengenanteile der Lieferanten i ;

Parameter selected(i) zeigt an ob bei Lieferant i eingekauft wird ;
selected(i)=0;

Option optcr=0;
Option minlp = baron;

// Heuristik
d = orig_d ;
while(not end,

lambda(i)=0 ;
sigma=sigma_hat ;
h(i,l)=lz*p(i,l) ;
converged = 0 ;
loop(iteration$(not converged), // Subgradientenverfahren

solve relaxation using minlp minimizing Lagrange ;
display q.l ;

sigma=sigma_hat/ord(iteration) ;

lambda(i)$flag(i)=max(0, lambda(i)+sigma*(sum(l, d*q.l(i,l))-QM(i)*sq.l)) ;
display lambda;

loop(i$flag(i),
if (lambda(i)0)) = QM(i)/orig_d ;

// letzte Iteration: Lösung der Lagrange-Relaxation ist zulässig, d.h. lambda(i)=0 für alle i
if (sum(i$flag(i), lambda(i)) = 0,
end = 1;
loop(i$flag(i),
if (sum(l, q.l(i,l))>1e-4,//warum 1e-4
alpha(i)=1-sum(ii$selected(ii), alpha(ii));
selected(i)=1;
);
);
);

display alpha ;
selected(i)$(flag(i) and (lambda(i)>0)) = 1 ;
flag(i)$(flag(i) and (lambda(i)>0)) = 0 ;

d = d - sum(i$(lambda(i)>0), qm(i)) ;
if (d = 0, end = 1) ;
display d ;
);

Parameter An Anzahl der Iteration für Modell Relaxation;
An=Relaxation.iterusd ;
display An;

Variables

qq(i,l) Bestellmenge
z(i,l) Binaere Indikatorvariable fuer q>0
sqq gesamte Bestellmenge
total_cost Gesamtkosten ;

sqq.lo=1;

Positive variable qq;
Binary variable z;

Equations
cost Gesamtkosten
NB6(i) Eindeutigkeit
NB7(i,l) Untergrenze von Bestellmenge
NB8(i,l) Obergrenze von Bestellmenge
NB9(i) Maximale Liefermenge;

cost.. total_cost =e= sum(i$selected(i), (alpha(i)*orig_d + alpha(i)*lz/2*sqq)*sum(l, p(i,l)*z(i,l)) + K(i)*orig_d/sqq) ;

NB6(i)$(selected(i)).. sum(l, z(i,l)) =l= 1 ;
NB7(i,l)$(selected(i)).. qq(i,l) =g= QU(i,l)*z(i,l) ;
NB8(i,l)$(selected(i)).. qq(i,l) =l= QO(i,l)*z(i,l) ;
NB9(i)$(selected(i)).. sum(l, qq(i,l)) =e= alpha(i)*sqq ;

Model opt_q /cost, NB6, NB7, NB8, NB9/;
sqq.lo = smax(i$selected(i), QU(i,"R1")/alpha(i)) ;

Solve opt_q using minlp minimizing total_cost ;
Display qq.l, sqq.l, z.l, total_cost.l ;


在 2016年1月25日,12:33,Renger van Nieuwkoop 写道:

> Hi Yu
>
> You can the iterations used to solve a model by storing yourmodelname.iterusd in a parameter.
>
> e.g.
> model test /all/;
> solve test…
> parameter iterationsused;
> iterationsused = test.iterusd;
> Cheers
>
> Renger
>
> From: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com]
> Sent: Freitag, 22. Januar 2016 18:59
> To: gamsworld@googlegroups.com
> Subject: Re: how to code the position of last element in a set
>
> hi Renger,
>
> can you please help me again, how can i write the code for output the number of Iteration for some certain model, is there an option for this or some easy way?
>
> Thank you!
>
> yu
> 在 2016年1月20日,10:56,Renger van Nieuwkoop 写道:
>
>
> Yes, it should be.
> Cheers
> Renger
>
> From: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com]
> Sent: Mittwoch, 20. Januar 2016 09:49
> To: gamsworld@googlegroups.com
> Subject: Re: how to code the position of last element in a set
>
> hi Renger,
>
> thank you for you help, but i don’t unterstand , why hier is ord(i)
> Best regards
>
> Yu
> 在 2016年1月19日,16:25,Renger van Nieuwkoop 写道:
>
>
>
> NB5(i,l)$(ord(l)>1 and ord(i) Cheers
> Renger
>
> From: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com]
> Sent: Dienstag, 19. Januar 2016 16:15
> To: gamsworld@googlegroups.com
> Subject: Re: how to code the position of last element in a set
>
> hi Renger,
>
> I want to defind the order of the element. I show you my example:
>
>
> my code:
>
> NB5(i,l)$(ord(l)>1 and ord(l) NB6(i,l)$(ord(l)>1 and ord(l)
> In there 1 ist the number of order for the first element, is the order number for the last one.
>
> some advice. Thank you!
>
> Best regards
>
> Yu
> 在 2016年1月19日,15:58,Renger van Nieuwkoop 写道:
>
>
>
>
> Hi Yu
> Use card(i) which will give you the cardinality of the set (the number of elements)
> Cheers
> Renger
>
> From: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com] On Behalf Of Yu Li
> Sent: Dienstag, 19. Januar 2016 15:14
> To: gamsworld
> Subject: how to code the position of last element in a set
>
> Hallo,
>
> the position for the first element in a set we can code like this: ord(i)=1, how to code the position for the last one?
>
> Thanks in advance.
>
> Yu
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.
>
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.
>
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.
>
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.

--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.
Archiver
User
User
Posts: 7876
Joined: 7 years ago

RE: how to code the position of last element in a set

Post by Archiver »


If you want to know when your loop ends, you have to define a parameter and store this number in this parameter



Parameter

loopnr /0/,

lastloopnr ;



While (…..,

Loopnr = loopnr + 1

My code

);

Lastloopnr = loopnr;



From: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com]
Sent: Montag, 25. Januar 2016 13:45
To: gamsworld@googlegroups.com
Subject: Re: how to code the position of last element in a set



hi Renger,



I attach my Codes, i have already put the Option in my codes, but it does’t work.

I want to count the total iteration for model Relaxation within the iteration what i defined( 50iterations).

Cound you help me?



best regards



Yu Li





*Subgradientenverfahren für Stufenrabatten

$eolcom //

sets



i Lieferanten /L1*L4/

l Rabattstufen /R1*R4/ ;

alias(i,ii);



Table P(i,l) Preis



R1 R2 R3 R4

L1 50 48 45 40

L2 48 45 43 40

L3 49 45 44 41

L4 47 44 40 37;



Table QU(i,l) Untergrenzen von Rabattstufe



R1 R2 R3 R4

L1 30 60 100 200

L2 40 80 120 220

L3 30 70 130 210

L4 20 40 60 150;



Table QO(i,l) Obergrenzen von Rabattstufe



R1 R2 R3 R4

L1 60 100 200 10000

L2 80 120 220 10000

L3 70 130 210 10000

L4 40 60 150 10000;







Parameters



QM(i) maximale Lieferraten



/L1 28

L2 20

L3 15

L4 30/



K(i) fixe Lieferkosten



/L1 120

L2 110

L3 115

L4 110/



lambda(i) Lagrange-Multiplikatoren



h(i,l) Lagerungskostensätze ;



Scalars d Rest-Bedarf pro Periode

orig_d ursprünglicher Bedarf pro Periode /35/

lz Lagerzinssatz /0.03/;



Variables



Lagrange Wert der Lagrange-Funktion

q(i,l) Bestellmenge

sq gesamte Bestellmenge

y(i,l) binaere Indikatorvariable fuer q>0 ;



sq.lo = 1; // zur Vermeidung numerischer Instabilität





Positive variable q;

Binary variable y;



Parameter flag(i) 1 wenn Lieferant i noch untersucht wird ;

flag(i)=1;



Equations

LR Definition Lagrange-Funktion

NB1 Bedarfdsrestriktion

NB2(i,l) Untergrenze von Bestellmenge

NB3(i,l) Obergrenze von Bestellmenge

NB4(i) Eindeutigkeit ;



LR.. Lagrange =e= sum((i,l)$flag(i), p(i,l)*q(i,l)*d/sq + h(i,l)* q(i,l)/2 + K(i)*y(i,l)*d/sq);

NB1.. sq =e= sum((i,l)$flag(i), q(i,l));

NB2(i,l)$flag(i).. q(i,l) =g= QU(i,l)*y(i,l) ;

NB3(i,l)$flag(i).. q(i,l) =l= QO(i,l)*y(i,l) ;

NB4(i)$flag(i).. sum(l, y(i,l)) =l= 1 ;



Model relaxation /LR, NB1, NB2, NB3, NB4/ ;



Set Iteration /iter1*iter50/;



Scalars end zeigt an ob Heuristik beendet ist /0/

converged zeigt an ob Subgradientenverfahren konvergiert ist

epsilon Toleranz für Abbruch des Subgradientenverfahrens /1/

sigma Schrittweite

sigma_hat Anfangswert der Schrittweite /1/ ;



Parameter alpha(i) Liefermengenanteile der Lieferanten i ;



Parameter selected(i) zeigt an ob bei Lieferant i eingekauft wird ;

selected(i)=0;



Option optcr=0;

Option minlp = baron;



// Heuristik

d = orig_d ;

while(not end,



lambda(i)=0 ;

sigma=sigma_hat ;

h(i,l)=lz*p(i,l) ;

converged = 0 ;

loop(iteration$(not converged), // Subgradientenverfahren



solve relaxation using minlp minimizing Lagrange ;

display q.l ;



sigma=sigma_hat/ord(iteration) ;



lambda(i)$flag(i)=max(0, lambda(i)+sigma*(sum(l, d*q.l(i,l))-QM(i)*sq.l)) ;

display lambda;



loop(i$flag(i),

if (lambda(i)0)) = QM(i)/orig_d ;



// letzte Iteration: Lösung der Lagrange-Relaxation ist zulässig, d.h. lambda(i)=0 für alle i

if (sum(i$flag(i), lambda(i)) = 0,

end = 1;

loop(i$flag(i),

if (sum(l, q.l(i,l))>1e-4,//warum 1e-4

alpha(i)=1-sum(ii$selected(ii), alpha(ii));

selected(i)=1;

);

);

);



display alpha ;

selected(i)$(flag(i) and (lambda(i)>0)) = 1 ;

flag(i)$(flag(i) and (lambda(i)>0)) = 0 ;



d = d - sum(i$(lambda(i)>0), qm(i)) ;

if (d = 0, end = 1) ;

display d ;

);



Parameter An Anzahl der Iteration für Modell Relaxation;

An=Relaxation.iterusd ;

display An;



Variables



qq(i,l) Bestellmenge

z(i,l) Binaere Indikatorvariable fuer q>0

sqq gesamte Bestellmenge

total_cost Gesamtkosten ;



sqq.lo=1;



Positive variable qq;

Binary variable z;



Equations

cost Gesamtkosten

NB6(i) Eindeutigkeit

NB7(i,l) Untergrenze von Bestellmenge

NB8(i,l) Obergrenze von Bestellmenge

NB9(i) Maximale Liefermenge;



cost.. total_cost =e= sum(i$selected(i), (alpha(i)*orig_d + alpha(i)*lz/2*sqq)*sum(l, p(i,l)*z(i,l)) + K(i)*orig_d/sqq) ;



NB6(i)$(selected(i)).. sum(l, z(i,l)) =l= 1 ;

NB7(i,l)$(selected(i)).. qq(i,l) =g= QU(i,l)*z(i,l) ;

NB8(i,l)$(selected(i)).. qq(i,l) =l= QO(i,l)*z(i,l) ;

NB9(i)$(selected(i)).. sum(l, qq(i,l)) =e= alpha(i)*sqq ;



Model opt_q /cost, NB6, NB7, NB8, NB9/;

sqq.lo = smax(i$selected(i), QU(i,"R1")/alpha(i)) ;



Solve opt_q using minlp minimizing total_cost ;

Display qq.l, sqq.l, z.l, total_cost.l ;





在 2016年1月25日,12:33,Renger van Nieuwkoop 写道:



Hi Yu



You can the iterations used to solve a model by storing yourmodelname.iterusd in a parameter.



e.g.

model test /all/;

solve test…

parameter iterationsused;

iterationsused = test.iterusd;

Cheers



Renger



From: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com]
Sent: Freitag, 22. Januar 2016 18:59
To: gamsworld@googlegroups.com
Subject: Re: how to code the position of last element in a set



hi Renger,



can you please help me again, how can i write the code for output the number of Iteration for some certain model, is there an option for this or some easy way?



Thank you!



yu

在 2016年1月20日,10:56,Renger van Nieuwkoop 写道:




Yes, it should be.

Cheers

Renger



From: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com]
Sent: Mittwoch, 20. Januar 2016 09:49
To: gamsworld@googlegroups.com
Subject: Re: how to code the position of last element in a set



hi Renger,



thank you for you help, but i don’t unterstand , why hier is ord(i) 写道:





NB5(i,l)$(ord(l)>1 and ord(i)



my code:



NB5(i,l)$(ord(l)>1 and ord(l)1 and ord(l) is the order number for the last one.



some advice. Thank you!



Best regards



Yu

在 2016年1月19日,15:58,Renger van Nieuwkoop 写道:






Hi Yu

Use card(i) which will give you the cardinality of the set (the number of elements)

Cheers

Renger



From: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com] On Behalf Of Yu Li
Sent: Dienstag, 19. Januar 2016 15:14
To: gamsworld
Subject: how to code the position of last element in a set



Hallo,



the position for the first element in a set we can code like this: ord(i)=1, how to code the position for the last one?



Thanks in advance.



Yu

--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.



--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.



--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.



--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.



--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.



--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.



--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.



--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.



--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.

--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.
Archiver
User
User
Posts: 7876
Joined: 7 years ago

Re: how to code the position of last element in a set

Post by Archiver »


hi Renger,

i added it in my code, but it returns wrong number, could you look it for me, thank you!Thank you!

Yu



Parameter loopnr /0/
Parameter lastloopnr ;

Option optcr=0;
Option minlp = baron;

// Heuristik
d = orig_d ;
while(not end,

Loopnr = loopnr + 1;
lambda(i)=0 ;
sigma=sigma_hat ;
h(i,l)=lz*p(i,l) ;
converged = 0 ;
loop(iteration$(not converged), // Subgradientenverfahren

solve relaxation using minlp minimizing Lagrange ;
display q.l ;

sigma=sigma_hat/ord(iteration) ;

lambda(i)$flag(i)=max(0, lambda(i)+sigma*(sum(l, d*q.l(i,l))-QM(i)*sq.l)) ;
display lambda;

loop(i$flag(i),
if (lambda(i)0)) = QM(i)/orig_d ;

// letzte Iteration: Lösung der Lagrange-Relaxation ist zulässig, d.h. lambda(i)=0 für alle i
if (sum(i$flag(i), lambda(i)) = 0,
end = 1;
loop(i$flag(i),
if (sum(l, q.l(i,l))>1e-4,//warum 1e-4
alpha(i)=1-sum(ii$selected(ii), alpha(ii));
selected(i)=1;
);
);
);

display alpha ;
selected(i)$(flag(i) and (lambda(i)>0)) = 1 ;
flag(i)$(flag(i) and (lambda(i)>0)) = 0 ;

d = d - sum(i$(lambda(i)>0), qm(i)) ;
if (d = 0, end = 1) ;
display d ;
);

Lastloopnr = loopnr;
display lastloopnr;
在 2016年1月25日,15:44,Renger van Nieuwkoop 写道:

> If you want to know when your loop ends, you have to define a parameter and store this number in this parameter
>
> Parameter
> loopnr /0/,
> lastloopnr ;
>
> While (…..,
> Loopnr = loopnr + 1
> My code
> );
> Lastloopnr = loopnr;
>
> From: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com]
> Sent: Montag, 25. Januar 2016 13:45
> To: gamsworld@googlegroups.com
> Subject: Re: how to code the position of last element in a set
>
> hi Renger,
>
> I attach my Codes, i have already put the Option in my codes, but it does’t work.
> I want to count the total iteration for model Relaxation within the iteration what i defined( 50iterations).
> Cound you help me?
>
> best regards
>
> Yu Li
>
>
> *Subgradientenverfahren für Stufenrabatten
> $eolcom //
> sets
>
> i Lieferanten /L1*L4/
> l Rabattstufen /R1*R4/ ;
> alias(i,ii);
>
> Table P(i,l) Preis
>
> R1 R2 R3 R4
> L1 50 48 45 40
> L2 48 45 43 40
> L3 49 45 44 41
> L4 47 44 40 37;
>
> Table QU(i,l) Untergrenzen von Rabattstufe
>
> R1 R2 R3 R4
> L1 30 60 100 200
> L2 40 80 120 220
> L3 30 70 130 210
> L4 20 40 60 150;
>
> Table QO(i,l) Obergrenzen von Rabattstufe
>
> R1 R2 R3 R4
> L1 60 100 200 10000
> L2 80 120 220 10000
> L3 70 130 210 10000
> L4 40 60 150 10000;
>
>
>
> Parameters
>
> QM(i) maximale Lieferraten
>
> /L1 28
> L2 20
> L3 15
> L4 30/
>
> K(i) fixe Lieferkosten
>
> /L1 120
> L2 110
> L3 115
> L4 110/
>
> lambda(i) Lagrange-Multiplikatoren
>
> h(i,l) Lagerungskostensätze ;
>
> Scalars d Rest-Bedarf pro Periode
> orig_d ursprünglicher Bedarf pro Periode /35/
> lz Lagerzinssatz /0.03/;
>
> Variables
>
> Lagrange Wert der Lagrange-Funktion
> q(i,l) Bestellmenge
> sq gesamte Bestellmenge
> y(i,l) binaere Indikatorvariable fuer q>0 ;
>
> sq.lo = 1; // zur Vermeidung numerischer Instabilität
>
>
> Positive variable q;
> Binary variable y;
>
> Parameter flag(i) 1 wenn Lieferant i noch untersucht wird ;
> flag(i)=1;
>
> Equations
> LR Definition Lagrange-Funktion
> NB1 Bedarfdsrestriktion
> NB2(i,l) Untergrenze von Bestellmenge
> NB3(i,l) Obergrenze von Bestellmenge
> NB4(i) Eindeutigkeit ;
>
> LR.. Lagrange =e= sum((i,l)$flag(i), p(i,l)*q(i,l)*d/sq + h(i,l)* q(i,l)/2 + K(i)*y(i,l)*d/sq);
> NB1.. sq =e= sum((i,l)$flag(i), q(i,l));
> NB2(i,l)$flag(i).. q(i,l) =g= QU(i,l)*y(i,l) ;
> NB3(i,l)$flag(i).. q(i,l) =l= QO(i,l)*y(i,l) ;
> NB4(i)$flag(i).. sum(l, y(i,l)) =l= 1 ;
>
> Model relaxation /LR, NB1, NB2, NB3, NB4/ ;
>
> Set Iteration /iter1*iter50/;
>
> Scalars end zeigt an ob Heuristik beendet ist /0/
> converged zeigt an ob Subgradientenverfahren konvergiert ist
> epsilon Toleranz für Abbruch des Subgradientenverfahrens /1/
> sigma Schrittweite
> sigma_hat Anfangswert der Schrittweite /1/ ;
>
> Parameter alpha(i) Liefermengenanteile der Lieferanten i ;
>
> Parameter selected(i) zeigt an ob bei Lieferant i eingekauft wird ;
> selected(i)=0;
>
> Option optcr=0;
> Option minlp = baron;
>
> // Heuristik
> d = orig_d ;
> while(not end,
>
> lambda(i)=0 ;
> sigma=sigma_hat ;
> h(i,l)=lz*p(i,l) ;
> converged = 0 ;
> loop(iteration$(not converged), // Subgradientenverfahren
>
> solve relaxation using minlp minimizing Lagrange ;
> display q.l ;
>
> sigma=sigma_hat/ord(iteration) ;
>
> lambda(i)$flag(i)=max(0, lambda(i)+sigma*(sum(l, d*q.l(i,l))-QM(i)*sq.l)) ;
> display lambda;
>
> loop(i$flag(i),
> if (lambda(i) else h(i,l)=lz*p(i,l)+2*(d*lambda(i)- sum(ii,lambda(ii)*QM(ii))));
> );
>
> if (sigma*sum(i, max(0, sum(l, d*q.l(i,l))-QM(i)*sq.l)) );
>
> alpha(i)$(flag(i) and (lambda(i)>0)) = QM(i)/orig_d ;
>
> // letzte Iteration: Lösung der Lagrange-Relaxation ist zulässig, d.h. lambda(i)=0 für alle i
> if (sum(i$flag(i), lambda(i)) = 0,
> end = 1;
> loop(i$flag(i),
> if (sum(l, q.l(i,l))>1e-4,//warum 1e-4
> alpha(i)=1-sum(ii$selected(ii), alpha(ii));
> selected(i)=1;
> );
> );
> );
>
> display alpha ;
> selected(i)$(flag(i) and (lambda(i)>0)) = 1 ;
> flag(i)$(flag(i) and (lambda(i)>0)) = 0 ;
>
> d = d - sum(i$(lambda(i)>0), qm(i)) ;
> if (d = 0, end = 1) ;
> display d ;
> );
>
> Parameter An Anzahl der Iteration für Modell Relaxation;
> An=Relaxation.iterusd ;
> display An;
>
> Variables
>
> qq(i,l) Bestellmenge
> z(i,l) Binaere Indikatorvariable fuer q>0
> sqq gesamte Bestellmenge
> total_cost Gesamtkosten ;
>
> sqq.lo=1;
>
> Positive variable qq;
> Binary variable z;
>
> Equations
> cost Gesamtkosten
> NB6(i) Eindeutigkeit
> NB7(i,l) Untergrenze von Bestellmenge
> NB8(i,l) Obergrenze von Bestellmenge
> NB9(i) Maximale Liefermenge;
>
> cost.. total_cost =e= sum(i$selected(i), (alpha(i)*orig_d + alpha(i)*lz/2*sqq)*sum(l, p(i,l)*z(i,l)) + K(i)*orig_d/sqq) ;
>
> NB6(i)$(selected(i)).. sum(l, z(i,l)) =l= 1 ;
> NB7(i,l)$(selected(i)).. qq(i,l) =g= QU(i,l)*z(i,l) ;
> NB8(i,l)$(selected(i)).. qq(i,l) =l= QO(i,l)*z(i,l) ;
> NB9(i)$(selected(i)).. sum(l, qq(i,l)) =e= alpha(i)*sqq ;
>
> Model opt_q /cost, NB6, NB7, NB8, NB9/;
> sqq.lo = smax(i$selected(i), QU(i,"R1")/alpha(i)) ;
>
> Solve opt_q using minlp minimizing total_cost ;
> Display qq.l, sqq.l, z.l, total_cost.l ;
>
>
> 在 2016年1月25日,12:33,Renger van Nieuwkoop 写道:
>
>
> Hi Yu
>
> You can the iterations used to solve a model by storing yourmodelname.iterusd in a parameter.
>
> e.g.
> model test /all/;
> solve test…
> parameter iterationsused;
> iterationsused = test.iterusd;
> Cheers
>
> Renger
>
> From: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com]
> Sent: Freitag, 22. Januar 2016 18:59
> To: gamsworld@googlegroups.com
> Subject: Re: how to code the position of last element in a set
>
> hi Renger,
>
> can you please help me again, how can i write the code for output the number of Iteration for some certain model, is there an option for this or some easy way?
>
> Thank you!
>
> yu
> 在 2016年1月20日,10:56,Renger van Nieuwkoop 写道:
>
>
>
> Yes, it should be.
> Cheers
> Renger
>
> From: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com]
> Sent: Mittwoch, 20. Januar 2016 09:49
> To: gamsworld@googlegroups.com
> Subject: Re: how to code the position of last element in a set
>
> hi Renger,
>
> thank you for you help, but i don’t unterstand , why hier is ord(i)
> Best regards
>
> Yu
> 在 2016年1月19日,16:25,Renger van Nieuwkoop 写道:
>
>
>
>
> NB5(i,l)$(ord(l)>1 and ord(i) Cheers
> Renger
>
> From: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com]
> Sent: Dienstag, 19. Januar 2016 16:15
> To: gamsworld@googlegroups.com
> Subject: Re: how to code the position of last element in a set
>
> hi Renger,
>
> I want to defind the order of the element. I show you my example:
>
>
> my code:
>
> NB5(i,l)$(ord(l)>1 and ord(l) NB6(i,l)$(ord(l)>1 and ord(l)
> In there 1 ist the number of order for the first element, is the order number for the last one.
>
> some advice. Thank you!
>
> Best regards
>
> Yu
> 在 2016年1月19日,15:58,Renger van Nieuwkoop 写道:
>
>
>
>
>
> Hi Yu
> Use card(i) which will give you the cardinality of the set (the number of elements)
> Cheers
> Renger
>
> From: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com] On Behalf Of Yu Li
> Sent: Dienstag, 19. Januar 2016 15:14
> To: gamsworld
> Subject: how to code the position of last element in a set
>
> Hallo,
>
> the position for the first element in a set we can code like this: ord(i)=1, how to code the position for the last one?
>
> Thanks in advance.
>
> Yu
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.
>
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.
>
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.
>
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.
>
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
> To post to this group, send email to gamsworld@googlegroups.com.
> Visit this group at https://groups.google.com/group/gamsworld.
> For more options, visit https://groups.google.com/d/optout.

--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.
Archiver
User
User
Posts: 7876
Joined: 7 years ago

RE: how to code the position of last element in a set

Post by Archiver »


Hi Yu

IF you know what you want to count, you should study your loops and then you will find where to put the line with loopnr = loopnr + 1…

Renger



From: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com]
Sent: Montag, 25. Januar 2016 16:11
To: gamsworld@googlegroups.com
Subject: Re: how to code the position of last element in a set



hi Renger,



i added it in my code, but it returns wrong number, could you look it for me, thank you!Thank you!



Yu







Parameter loopnr /0/

Parameter lastloopnr ;



Option optcr=0;

Option minlp = baron;



// Heuristik

d = orig_d ;

while(not end,



Loopnr = loopnr + 1;

lambda(i)=0 ;

sigma=sigma_hat ;

h(i,l)=lz*p(i,l) ;

converged = 0 ;

loop(iteration$(not converged), // Subgradientenverfahren



solve relaxation using minlp minimizing Lagrange ;

display q.l ;



sigma=sigma_hat/ord(iteration) ;



lambda(i)$flag(i)=max(0, lambda(i)+sigma*(sum(l, d*q.l(i,l))-QM(i)*sq.l)) ;

display lambda;



loop(i$flag(i),

if (lambda(i)0)) = QM(i)/orig_d ;



// letzte Iteration: Lösung der Lagrange-Relaxation ist zulässig, d.h. lambda(i)=0 für alle i

if (sum(i$flag(i), lambda(i)) = 0,

end = 1;

loop(i$flag(i),

if (sum(l, q.l(i,l))>1e-4,//warum 1e-4

alpha(i)=1-sum(ii$selected(ii), alpha(ii));

selected(i)=1;

);

);

);



display alpha ;

selected(i)$(flag(i) and (lambda(i)>0)) = 1 ;

flag(i)$(flag(i) and (lambda(i)>0)) = 0 ;



d = d - sum(i$(lambda(i)>0), qm(i)) ;

if (d = 0, end = 1) ;

display d ;

);



Lastloopnr = loopnr;

display lastloopnr;

在 2016年1月25日,15:44,Renger van Nieuwkoop 写道:



If you want to know when your loop ends, you have to define a parameter and store this number in this parameter



Parameter

loopnr /0/,

lastloopnr ;



While (…..,

Loopnr = loopnr + 1

My code

);

Lastloopnr = loopnr;



From: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com]
Sent: Montag, 25. Januar 2016 13:45
To: gamsworld@googlegroups.com
Subject: Re: how to code the position of last element in a set



hi Renger,



I attach my Codes, i have already put the Option in my codes, but it does’t work.

I want to count the total iteration for model Relaxation within the iteration what i defined( 50iterations).

Cound you help me?



best regards



Yu Li





*Subgradientenverfahren für Stufenrabatten

$eolcom //

sets



i Lieferanten /L1*L4/

l Rabattstufen /R1*R4/ ;

alias(i,ii);



Table P(i,l) Preis



R1 R2 R3 R4

L1 50 48 45 40

L2 48 45 43 40

L3 49 45 44 41

L4 47 44 40 37;



Table QU(i,l) Untergrenzen von Rabattstufe



R1 R2 R3 R4

L1 30 60 100 200

L2 40 80 120 220

L3 30 70 130 210

L4 20 40 60 150;



Table QO(i,l) Obergrenzen von Rabattstufe



R1 R2 R3 R4

L1 60 100 200 10000

L2 80 120 220 10000

L3 70 130 210 10000

L4 40 60 150 10000;







Parameters



QM(i) maximale Lieferraten



/L1 28

L2 20

L3 15

L4 30/



K(i) fixe Lieferkosten



/L1 120

L2 110

L3 115

L4 110/



lambda(i) Lagrange-Multiplikatoren



h(i,l) Lagerungskostensätze ;



Scalars d Rest-Bedarf pro Periode

orig_d ursprünglicher Bedarf pro Periode /35/

lz Lagerzinssatz /0.03/;



Variables



Lagrange Wert der Lagrange-Funktion

q(i,l) Bestellmenge

sq gesamte Bestellmenge

y(i,l) binaere Indikatorvariable fuer q>0 ;



sq.lo = 1; // zur Vermeidung numerischer Instabilität





Positive variable q;

Binary variable y;



Parameter flag(i) 1 wenn Lieferant i noch untersucht wird ;

flag(i)=1;



Equations

LR Definition Lagrange-Funktion

NB1 Bedarfdsrestriktion

NB2(i,l) Untergrenze von Bestellmenge

NB3(i,l) Obergrenze von Bestellmenge

NB4(i) Eindeutigkeit ;



LR.. Lagrange =e= sum((i,l)$flag(i), p(i,l)*q(i,l)*d/sq + h(i,l)* q(i,l)/2 + K(i)*y(i,l)*d/sq);

NB1.. sq =e= sum((i,l)$flag(i), q(i,l));

NB2(i,l)$flag(i).. q(i,l) =g= QU(i,l)*y(i,l) ;

NB3(i,l)$flag(i).. q(i,l) =l= QO(i,l)*y(i,l) ;

NB4(i)$flag(i).. sum(l, y(i,l)) =l= 1 ;



Model relaxation /LR, NB1, NB2, NB3, NB4/ ;



Set Iteration /iter1*iter50/;



Scalars end zeigt an ob Heuristik beendet ist /0/

converged zeigt an ob Subgradientenverfahren konvergiert ist

epsilon Toleranz für Abbruch des Subgradientenverfahrens /1/

sigma Schrittweite

sigma_hat Anfangswert der Schrittweite /1/ ;



Parameter alpha(i) Liefermengenanteile der Lieferanten i ;



Parameter selected(i) zeigt an ob bei Lieferant i eingekauft wird ;

selected(i)=0;



Option optcr=0;

Option minlp = baron;



// Heuristik

d = orig_d ;

while(not end,



lambda(i)=0 ;

sigma=sigma_hat ;

h(i,l)=lz*p(i,l) ;

converged = 0 ;

loop(iteration$(not converged), // Subgradientenverfahren



solve relaxation using minlp minimizing Lagrange ;

display q.l ;



sigma=sigma_hat/ord(iteration) ;



lambda(i)$flag(i)=max(0, lambda(i)+sigma*(sum(l, d*q.l(i,l))-QM(i)*sq.l)) ;

display lambda;



loop(i$flag(i),

if (lambda(i)0)) = QM(i)/orig_d ;



// letzte Iteration: Lösung der Lagrange-Relaxation ist zulässig, d.h. lambda(i)=0 für alle i

if (sum(i$flag(i), lambda(i)) = 0,

end = 1;

loop(i$flag(i),

if (sum(l, q.l(i,l))>1e-4,//warum 1e-4

alpha(i)=1-sum(ii$selected(ii), alpha(ii));

selected(i)=1;

);

);

);



display alpha ;

selected(i)$(flag(i) and (lambda(i)>0)) = 1 ;

flag(i)$(flag(i) and (lambda(i)>0)) = 0 ;



d = d - sum(i$(lambda(i)>0), qm(i)) ;

if (d = 0, end = 1) ;

display d ;

);



Parameter An Anzahl der Iteration für Modell Relaxation;

An=Relaxation.iterusd ;

display An;



Variables



qq(i,l) Bestellmenge

z(i,l) Binaere Indikatorvariable fuer q>0

sqq gesamte Bestellmenge

total_cost Gesamtkosten ;



sqq.lo=1;



Positive variable qq;

Binary variable z;



Equations

cost Gesamtkosten

NB6(i) Eindeutigkeit

NB7(i,l) Untergrenze von Bestellmenge

NB8(i,l) Obergrenze von Bestellmenge

NB9(i) Maximale Liefermenge;



cost.. total_cost =e= sum(i$selected(i), (alpha(i)*orig_d + alpha(i)*lz/2*sqq)*sum(l, p(i,l)*z(i,l)) + K(i)*orig_d/sqq) ;



NB6(i)$(selected(i)).. sum(l, z(i,l)) =l= 1 ;

NB7(i,l)$(selected(i)).. qq(i,l) =g= QU(i,l)*z(i,l) ;

NB8(i,l)$(selected(i)).. qq(i,l) =l= QO(i,l)*z(i,l) ;

NB9(i)$(selected(i)).. sum(l, qq(i,l)) =e= alpha(i)*sqq ;



Model opt_q /cost, NB6, NB7, NB8, NB9/;

sqq.lo = smax(i$selected(i), QU(i,"R1")/alpha(i)) ;



Solve opt_q using minlp minimizing total_cost ;

Display qq.l, sqq.l, z.l, total_cost.l ;





在 2016年1月25日,12:33,Renger van Nieuwkoop 写道:




Hi Yu



You can the iterations used to solve a model by storing yourmodelname.iterusd in a parameter.



e.g.

model test /all/;

solve test…

parameter iterationsused;

iterationsused = test.iterusd;

Cheers



Renger



From: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com]
Sent: Freitag, 22. Januar 2016 18:59
To: gamsworld@googlegroups.com
Subject: Re: how to code the position of last element in a set



hi Renger,



can you please help me again, how can i write the code for output the number of Iteration for some certain model, is there an option for this or some easy way?



Thank you!



yu

在 2016年1月20日,10:56,Renger van Nieuwkoop 写道:





Yes, it should be.

Cheers

Renger



From: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com]
Sent: Mittwoch, 20. Januar 2016 09:49
To: gamsworld@googlegroups.com
Subject: Re: how to code the position of last element in a set



hi Renger,



thank you for you help, but i don’t unterstand , why hier is ord(i) 写道:






NB5(i,l)$(ord(l)>1 and ord(i)



my code:



NB5(i,l)$(ord(l)>1 and ord(l)1 and ord(l) is the order number for the last one.



some advice. Thank you!



Best regards



Yu

在 2016年1月19日,15:58,Renger van Nieuwkoop 写道:







Hi Yu

Use card(i) which will give you the cardinality of the set (the number of elements)

Cheers

Renger



From: gamsworld@googlegroups.com [mailto:gamsworld@googlegroups.com] On Behalf Of Yu Li
Sent: Dienstag, 19. Januar 2016 15:14
To: gamsworld
Subject: how to code the position of last element in a set



Hallo,



the position for the first element in a set we can code like this: ord(i)=1, how to code the position for the last one?



Thanks in advance.



Yu

--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.



--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.



--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.



--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.



--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.



--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.



--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.



--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.



--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.



--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.



--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.

--
To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at https://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.
Post Reply