help-glpk
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Help-glpk] One more question about how to use GLPK for specific pro


From: Dmitriy Yun
Subject: Re: [Help-glpk] One more question about how to use GLPK for specific problem
Date: Thu, 14 Oct 2010 13:28:54 +0700

Hi Xypron,

> Do you refer to GLPK#?
> http://yoyovicks.blog.free.fr/
>
> It comes with an example file in
> GlpkSharp-src.7z\GlpkSharp\GlpkSharp\TestGlpkSharp\Program.cs
>
> Look into directory
> GlpkSharp-src.7z\GlpkSharp\GlpkSharp\GlpkSharp\
> for the mapping of individual functions and constants.
Yes, I use this wrapper.
I used the example from Program.cs to create c# code for my problem
(at least I tried to do it).
Do you mean that I can use this C# wrapper to load data from .CSV file.

> GLPK comes with a standalone solver GLPSOL which can import data
> from CSV files or an SQL database.
Am I right understand that this C# wrapper is a wrapper for GLPSOL
standalone solver?


>> Matrix of service times. Columns are customers, rows are technicians
>> 7.30  10.80  13.00  2.70
>> 9.30  9.00  13.00  8.50
>> 5.30  9.00  9.00  12.50

>What do these numbers imply? Could technician 2 do the job for
>customer 1 in 9.30 hours, while technician 3 would need 5.3 hours
>for the same job to be done?
Yes, correct.
Each customer can be served by only one technician.

With best regards,
Dmitry

On Thu, Oct 14, 2010 at 1:02 PM, glpk xypron <address@hidden> wrote:
> Hello Dimitry,
>
> GLPK comes with a standalone solver GLPSOL which can import data
> from CSV files or an SQL database.
>
> Using the glpk library is only necessary, if you want to apply
> heuristics like column generation or if you want to integrate
> glpk into a larger application.
>
> I suggest that you first formulate your problem with GMPL and
> solve it with GLPSOL. This way you will be sure which equations
> you want to create in the C# code.
>
> ---
>
> Unfortunately you did not provide any information on the C#
> wrapper you want to use.
>
> Do you refer to GLPK#?
> http://yoyovicks.blog.free.fr/
>
> It comes with an example file in
> GlpkSharp-src.7z\GlpkSharp\GlpkSharp\TestGlpkSharp\Program.cs
>
> Look into directory
> GlpkSharp-src.7z\GlpkSharp\GlpkSharp\GlpkSharp\
> for the mapping of individual functions and constants.
>
> You can find the documentation of the GLPK functions available for
> GLPK# in fileglpk-4.42\doc\gmpl.pdf of the source distribution of
> GLPK available at
> ftp://ftp.gnu.org/gnu/glpk/glpk-4.42.tar.gz
>
> ---
>
> Concerning your problem:
>> Matrix of service times. Columns are customers, rows are technicians
>> 7.30  10.80  13.00  2.70
>> 9.30  9.00  13.00  8.50
>> 5.30  9.00  9.00  12.50
> What do these numbers imply? Could technician 2 do the job for
> customer 1 in 9.30 hours, while technician 3 would need 5.3 hours
> for the same job to be done?
>
> Concerning your code:
> Arrays in C start at index 0. GLPK only uses the values for
> indices 1 and above.
>
> The default column type is FLOAT. You centainly want to set the
> column type to BINARY.
>
> Best regards
>
> Xypron
>
> -------- Original-Nachricht --------
>> Datum: Thu, 14 Oct 2010 12:26:07 +0700
>> Betreff: [Help-glpk] One more question about how to use GLPK for specific    
>>  problem
>
>> Hi Everyone,
>>
>> I've found c# wrapper on GLPK, but don't know how to build code to use
>> the library for my specific problem.
>> Could you please help me to clarify sequence of steps required to make
>> it work properly?
>>
>> The following is my problem.
>>
>> 1. There are N technicians and M customers.
>> 2. Technicians should serve customers.
>> 3. Technicians have restrictions on total working time (e.g. per
>> week/year).
>> 4. All customers should be served by one and only one technician. In
>> other words for one customer there is only one technician who serve
>> this customer.
>> 5. The objective - to minimize the sum of working time of all technicians.
>>
>> Input:
>> I. NxM matrix of weights (in my case - service times).
>> II. N vector of restrictions on technicians' total working time..
>>
>> Output:
>> NxM adjacency matrix of {0, 1}
>>
>> The problem complexity should be N^M.
>> Looks like I need Branch-and-Cut method to solve this problem.
>> --------------------------------------------------------------------------------------------------------------------------
>> Matrix of service times. Columns are customers, rows are technicians
>> 7.30  10.80  13.00  2.70
>> 9.30  9.00  13.00  8.50
>> 5.30  9.00  9.00  12.50
>>
>> Vector of technicians' total working time
>> 10.00
>> 18.30
>> 14.20
>>
>> Output adjacensy matrix should be like this
>> 1  0  0  1
>> 0  1  0  0
>> 0  0  1  0
>>
>> or in the equivalent form of { 0 1 2 0 }
>>
>> I developed my own version of B-n-C algoriithm just for test version.
>> I wonna use GLKP version.
>> so for these data
>> solutions will be
>>
>>  0  2  1  0 - 32
>>  0  1  2  0 - 28
>>  1  1  2  0 - 30
>>  0  1  2  1 - 33.8
>>
>> Where the last number is the sum of technicians' working times.
>> The minimum solution is
>> 0  1  2  0 - 28
>>
>> So now I need to find it using GLKP.
>> --------------------------------------------------------------------------------------------------------------------------
>> I developed some code demonstrating how I understand this process, but
>> looks like it should be more sophisticated.
>>
>>            LPProblem p = new LPProblem();
>>            p.ObjectiveDirection = OptimisationDirection.MINIMISE;
>>
>>            p.AddRows(3);
>>            // the code below should be corrected definitely
>>            // here should be restriction on sum of working time  for
>> all customers served by technician
>>            p.SetRowBounds(1, BOUNDSTYPE.Upper, 0, 10.0f);  ???
>>            p.SetRowBounds(2, BOUNDSTYPE.Upper, 0, 18.3f);  ???
>>            p.SetRowBounds(3, BOUNDSTYPE.Upper, 0, 14.3f);  ???
>>
>>            p.AddCols(4);
>>
>>            // the code below should be corrected definitely -
>>            // here we should be sure that every customer served by
>> one and only one technician
>>            p.SetColBounds(1, BOUNDSTYPE.Lower, 1f, 1f);    ???
>>            p.SetColBounds(2, BOUNDSTYPE.Lower, 1f, 1f);    ???
>>            p.SetColBounds(3, BOUNDSTYPE.Lower, 1f, 1f);    ???
>>            p.SetColBounds(4, BOUNDSTYPE.Lower, 1f, 1f);    ???
>>
>>            int[] a = new int[] { 0, 1, 2, 3 };
>>            p.SetMatRow(1, a, new double[] { 7.3f, 10.8f, 13.0f, 2.7f });
>>            p.SetMatRow(2, a, new double[] { 9.3f, 9.0f, 13.0f, 8.5f });
>>            p.SetMatRow(3, a, new double[] { 5.3f, 9.0f, 9.0f, 12.5f });
>>
>>            new BnCCallback().SetCallback(p, new
>> BranchAndCutDelegate(delegate(BranchTree t, Object o) {
>> Console.Out.WriteLine("toto"); }));
>>            p.WriteSol("c:\\sol.txt");
>> --------------------------------------------------------------------------------------------------------------------------
>> --
>> With best regards,
>> Dmitry
>>
>> _______________________________________________
>> Help-glpk mailing list
>> address@hidden
>> http://lists.gnu.org/mailman/listinfo/help-glpk
>
> --
> Neu: GMX De-Mail - Einfach wie E-Mail, sicher wie ein Brief!
> Jetzt De-Mail-Adresse reservieren: http://portal.gmx.net/de/go/demail
>



-- 
With best regards,
Dmitry



reply via email to

[Prev in Thread] Current Thread [Next in Thread]