Re: next question - find some element of a set
I think the answer is no: GMPL does not believe in the axiom of choice. -- Michael henne...@web.cs.ndsu.nodak.edu "Sorry but your password must contain an uppercase letter, a number, a haiku, a gang sign, a heiroglyph, and the blood of a virgin." -- someeecards
Re: next question - find some element of a set
Yes, sorry, forgot to mention that limitation. I may be wrong, but getting a Singleton set is doable. Getting its only element is the thing for which I don't see a way now. So it is possible to generate such a set, Selected, and include {s in Selected} everywhere where needed. One way to generate it with the mentioned index solution: set S; set Indices := 1..card(S); param position{s in S}:=sum{ss in S: ss Thank you. That works in the case that the array cost is numeric (and would work for me in this case!). The max function will not work if the array is symbolic. Out of sheer curiosity, I wonder if there is a general solution for getting an element from a set and putting that into a (symbolic) parameter. -Original Message- From: Mate Hegyhati Sent: Thursday, December 12, 2019 12:35 PM To: Meketon, Marc ; help-glpk@gnu.org Subject: Re: next question - find some element of a set Hi! Thanks for the clarification. If I understand correctly, and ANY proper cost value is ok, and you don't need the element itself, just the cost value, then min/max could also work. param some_valid_cost := max{s in S} cost[s]; Another more "random" solution (more like a workaround): param selector{s in S} := Irand224(); param some_valid_cost := sum{s in S: selector[s] == max {ss in S} selector[ss]} cost[s]; (but it fails, if the max value is generated twice) I hope this helps. All the best! Mate On 12/12/19 4:19 PM, Meketon, Marc wrote: Here is more clarification. I have a set S and an array cost[]. I wanted to get a cost -- any cost -- that is found in the array cost. I didn't want to have to specify in the data section a sample element of S, I just wanted to use GMPL to find one. In the example below, I want to find SOME_ELEMENT_IN_S as an index to the array cost[]. set S; param cost{S}; param some_valid_cost := cost[SOME_ELEMENT_IN_S]; data; param : S : cost := A 100 B 105 C 198 ; -Original Message- From: Help-glpk On Behalf Of Mate Hegyhati Sent: Thursday, December 12, 2019 2:29 AM To: help-glpk@gnu.org Subject: Re: next question - find some element of a set Hi! I'm not exactly sure, what you would like to do, but you could just say, but maybe this answers your question: set sports; param favorite symbolic in sports; var train{sports} >=0; s.t. foobar: train[favorite] >=2; minimize work: sum{f in sports} train[f]; data; set sports := running cycling swimming; param favorite := 'running'; end; So put ' around the name for a symbolic parameter, and also don't put comma between set elements. I hope this helped. If not, please clarify your situation. All the best, Mate set := A, B, C; param some_element_in_set, symbolic := ?; The closest I saw was in this old help-glpk email: https://lists.gnu.org/archive/html/help-glpk/2006-11/msg00059.html Which says: set S; param ref{i in 1..card(S)}, symbolic, in S; # ref[i] refers to i-th element of S; param a{S}; ... a[ref[i]] ... # means a[i-th element of S] But I cannot get this to work. If I could get it to work, then I would do something like: param some_element_in_set := ref[1]; BTW, I’m still hoping that someone will help solve how to work the sudoku_excel.mod example in the ‘examples\sql’ directory of the GLPK directory under Windows 10 64bit. I still cannot get that to work. -Marc
RE: next question - find some element of a set
Thank you. That works in the case that the array cost is numeric (and would work for me in this case!). The max function will not work if the array is symbolic. Out of sheer curiosity, I wonder if there is a general solution for getting an element from a set and putting that into a (symbolic) parameter. -Original Message- From: Mate Hegyhati Sent: Thursday, December 12, 2019 12:35 PM To: Meketon, Marc ; help-glpk@gnu.org Subject: Re: next question - find some element of a set Hi! Thanks for the clarification. If I understand correctly, and ANY proper cost value is ok, and you don't need the element itself, just the cost value, then min/max could also work. param some_valid_cost := max{s in S} cost[s]; Another more "random" solution (more like a workaround): param selector{s in S} := Irand224(); param some_valid_cost := sum{s in S: selector[s] == max {ss in S} selector[ss]} cost[s]; (but it fails, if the max value is generated twice) I hope this helps. All the best! Mate On 12/12/19 4:19 PM, Meketon, Marc wrote: > Here is more clarification. I have a set S and an array cost[]. > I wanted to get a cost -- any cost -- that is found in the array cost. > I didn't want to have to specify in the data section a sample element > of S, I just wanted to use GMPL to find one. In the example below, I > want to find SOME_ELEMENT_IN_S as an index to the array cost[]. > > set S; param cost{S}; > > param some_valid_cost := cost[SOME_ELEMENT_IN_S]; > > data; param : S : cost := A 100 B 105 C 198 ; > > -Original Message- From: Help-glpk > On Behalf Of > Mate Hegyhati Sent: Thursday, December 12, 2019 2:29 AM To: > help-glpk@gnu.org Subject: Re: next question - find some element of a > set > > Hi! > > I'm not exactly sure, what you would like to do, but you could just > say, but maybe this answers your question: > > set sports; param favorite symbolic in sports; > > var train{sports} >=0; > > s.t. foobar: train[favorite] >=2; > > minimize work: sum{f in sports} train[f]; > > data; > > set sports := running cycling swimming; param favorite := 'running'; > > end; > > > So put ' around the name for a symbolic parameter, and also don't put > comma between set elements. > > I hope this helped. If not, please clarify your situation. > > All the best, > > Mate > > >> set := A, B, C; >> >> param some_element_in_set, symbolic := ?; >> >> The closest I saw was in this old help-glpk email: >> https://lists.gnu.org/archive/html/help-glpk/2006-11/msg00059.html >> >> Which says: >> >> set S; >> >> param ref{i in 1..card(S)}, symbolic, in S; >> >> # ref[i] refers to i-th element of S; >> >> param a{S}; >> >> ... a[ref[i]] ... # means a[i-th element of S] >> >> But I cannot get this to work. If I could get it to work, then I >> would do something like: param some_element_in_set := ref[1]; >> >> BTW, I’m still hoping that someone will help solve how to work the >> sudoku_excel.mod example in the ‘examples\sql’ directory of the GLPK >> directory under Windows 10 64bit. I still cannot get that to work. >> >> -Marc >> >
Re: next question - find some element of a set
Hi! Thanks for the clarification. If I understand correctly, and ANY proper cost value is ok, and you don't need the element itself, just the cost value, then min/max could also work. param some_valid_cost := max{s in S} cost[s]; Another more "random" solution (more like a workaround): param selector{s in S} := Irand224(); param some_valid_cost := sum{s in S: selector[s] == max {ss in S} selector[ss]} cost[s]; (but it fails, if the max value is generated twice) I hope this helps. All the best! Mate On 12/12/19 4:19 PM, Meketon, Marc wrote: Here is more clarification. I have a set S and an array cost[]. I wanted to get a cost -- any cost -- that is found in the array cost. I didn't want to have to specify in the data section a sample element of S, I just wanted to use GMPL to find one. In the example below, I want to find SOME_ELEMENT_IN_S as an index to the array cost[]. set S; param cost{S}; param some_valid_cost := cost[SOME_ELEMENT_IN_S]; data; param : S : cost := A 100 B 105 C 198 ; -Original Message- From: Help-glpk On Behalf Of Mate Hegyhati Sent: Thursday, December 12, 2019 2:29 AM To: help-glpk@gnu.org Subject: Re: next question - find some element of a set Hi! I'm not exactly sure, what you would like to do, but you could just say, but maybe this answers your question: set sports; param favorite symbolic in sports; var train{sports} >=0; s.t. foobar: train[favorite] >=2; minimize work: sum{f in sports} train[f]; data; set sports := running cycling swimming; param favorite := 'running'; end; So put ' around the name for a symbolic parameter, and also don't put comma between set elements. I hope this helped. If not, please clarify your situation. All the best, Mate set := A, B, C; param some_element_in_set, symbolic := ?; The closest I saw was in this old help-glpk email: https://lists.gnu.org/archive/html/help-glpk/2006-11/msg00059.html Which says: set S; param ref{i in 1..card(S)}, symbolic, in S; # ref[i] refers to i-th element of S; param a{S}; ... a[ref[i]] ... # means a[i-th element of S] But I cannot get this to work. If I could get it to work, then I would do something like: param some_element_in_set := ref[1]; BTW, I’m still hoping that someone will help solve how to work the sudoku_excel.mod example in the ‘examples\sql’ directory of the GLPK directory under Windows 10 64bit. I still cannot get that to work. -Marc
RE: next question - find some element of a set
Here is more clarification. I have a set S and an array cost[]. I wanted to get a cost -- any cost -- that is found in the array cost. I didn't want to have to specify in the data section a sample element of S, I just wanted to use GMPL to find one. In the example below, I want to find SOME_ELEMENT_IN_S as an index to the array cost[]. set S; param cost{S}; param some_valid_cost := cost[SOME_ELEMENT_IN_S]; data; param : S : cost := A 100 B 105 C 198 ; -Original Message- From: Help-glpk On Behalf Of Mate Hegyhati Sent: Thursday, December 12, 2019 2:29 AM To: help-glpk@gnu.org Subject: Re: next question - find some element of a set Hi! I'm not exactly sure, what you would like to do, but you could just say, but maybe this answers your question: set sports; param favorite symbolic in sports; var train{sports} >=0; s.t. foobar: train[favorite] >=2; minimize work: sum{f in sports} train[f]; data; set sports := running cycling swimming; param favorite := 'running'; end; So put ' around the name for a symbolic parameter, and also don't put comma between set elements. I hope this helped. If not, please clarify your situation. All the best, Mate > set := A, B, C; > > param some_element_in_set, symbolic := ?; > > The closest I saw was in this old help-glpk email: > https://lists.gnu.org/archive/html/help-glpk/2006-11/msg00059.html > > Which says: > > set S; > > param ref{i in 1..card(S)}, symbolic, in S; > > # ref[i] refers to i-th element of S; > > param a{S}; > > ... a[ref[i]] ... # means a[i-th element of S] > > But I cannot get this to work. If I could get it to work, then I > would do something like: param some_element_in_set := ref[1]; > > BTW, I’m still hoping that someone will help solve how to work the > sudoku_excel.mod example in the ‘examples\sql’ directory of the GLPK > directory under Windows 10 64bit. I still cannot get that to work. > > -Marc >