Re: next question - find some element of a set

2019-12-12 Thread Michael Hennebry

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

2019-12-12 Thread Mate Hegyhati

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

2019-12-12 Thread Meketon, Marc
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

2019-12-12 Thread Mate Hegyhati

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

2019-12-12 Thread Meketon, Marc
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
>