For loadmatrix the following should work:

            int[] ia = new int[10];
            int[] ja = new int[10];
            double[] ar = new double[10];

            ia[1] = 1; ja[1] = 1; ar[1] = 1.0;   /* a[1,1] =  1 */
            ia[2] = 1; ja[2] = 2; ar[2] = 1.0;   /* a[1,2] =  1 */
            ia[3] = 1; ja[3] = 3; ar[3] = 1.0;   /* a[1,3] =  1 */
            ia[4] = 2; ja[4] = 1; ar[4] = 10.0;   /* a[2,1] = 10 */
            ia[5] = 3; ja[5] = 1; ar[5] = 2.0;   /* a[3,1] =  2 */
            ia[6] = 2; ja[6] = 2; ar[6] = 4.0;   /* a[2,2] =  4 */
            ia[7] = 3; ja[7] = 2; ar[7] = 2.0;   /* a[3,2] =  2 */
            ia[8] = 2; ja[8] = 3; ar[8] = 5.0;   /* a[2,3] =  5 */
            ia[9] = 3; ja[9] = 3; ar[9] = 6.0;   /* a[3,3] =  6 */

            LPProblem lp = new LPProblem();
            lp.AddCols(3);
            lp.AddRows(3);
            lp.LoadMatrix(ia, ja, ar);
            lp.SetRowBounds(1, BOUNDSTYPE.Upper, 0, 100);
            lp.SetRowBounds(2, BOUNDSTYPE.Upper, 0, 600);
            lp.SetRowBounds(3, BOUNDSTYPE.Upper, 0, 300);
            lp.SetObjCoef(1, 10);
            lp.SetObjCoef(2, 6);
            lp.SetObjCoef(3, 4);
            lp.ObjectiveDirection = OptimisationDirection.MAXIMISE;
            //par défaut, les bornes sont à 0.
            lp.SetColBounds(1, BOUNDSTYPE.Lower, 0, 0);
            lp.SetColBounds(2, BOUNDSTYPE.Lower, 0, 0);
            lp.SetColBounds(3, BOUNDSTYPE.Lower, 0, 0);
            //lp.WriteCPLEX("yo.lp");
            Console.Out.WriteLine(lp.SolveSimplex().ToString());
            Console.Out.WriteLine("tapez une touche.");
            Console.In.Read();

About array size, yes it is shifted by one in glpk so I have to do it in C# as 
well.

Yo.



 > Message du 27/05/09 17:38
> De : "bo liu"
> A : "yoyovicks"
> Copie à : [email protected]
> Objet : Re: [Help-glpk] does anyone use yoyo's GLPKSharp?
>
> yoyovicks,   i'm so happy that i can receive your reply. this is the example 
> of GLPK.pdf  named sample.c    .  maximize
> z = 10x1 + 6x2 + 4x3
> subject to
> x1 + x2 + x3 <= 100
> 10x1 + 4x2 + 5x3 <= 600
> 2x1 + 2x2 + 6x3 <= 300
> where all variables are non-negative
> x1>= 0, x2>=0, x3>=0  this is a simple LP problem , and i want to use your 
> GLPKSharp.dll to solve some problem like this (because i use C# and VS2005 
> too),so i translate it into your GLPKSharp form to study how to use your 
> GLPKSharp.dll  .      in this example ,the coefficients matrix of structural 
> variables are prepared like this:   s21:  ia[1] = 1, ja[1] = 1, ar[1] =  
> 1.0;   /* a[1,1] =  1 */
> s22:  ia[2] = 1, ja[2] = 2, ar[2] =  1.0;   /* a[1,2] =  1 */
> s23:  ia[3] = 1, ja[3] = 3, ar[3] =  1.0;   /* a[1,3] =  1 */
>  s24:  ia[4] = 2, ja[4] = 1, ar[4] = 10.0;   /* a[2,1] = 10 */
> s25:  ia[5] = 3, ja[5] = 1, ar[5] =  2.0;   /* a[3,1] =  2 */
> s26:  ia[6] = 2, ja[6] = 2, ar[6] =  4.0;   /* a[2,2] =  4 */
> s27:  ia[7] = 3, ja[7] = 2, ar[7] =  2.0;   /* a[3,2] =  2 */
>  s28:  ia[8] = 2, ja[8] = 3, ar[8] =  5.0;   /* a[2,3] =  5 */
> s29:  ia[9] = 3, ja[9] = 3, ar[9] =  6.0;   /* a[3,3] =  6 */
> s30:  glp_load_matrix(lp, 9, ia, ja, ar);    if i use theGLPKSharp.dll , i 
> can't accomplish it like this.     but finally i achieve it by this form:     
>     int[] a = new int[] { 0, 1, 2, 3 };         p.SetMatRow(1, a, new 
> double[] { 0, 1.0, 1.0, 1.0 });
>         p.SetMatRow(2, a, new double[] { 0, 10.0, 4.0, 5.0 });
>         p.SetMatRow(3, a, new double[] { 0, 2.0, 2.0, 6.0 });    i think 
> the array a[] must be the array of column index,right?but in this array the 
> first value is 0. i also know that GLPK need the array starts from a[1] 
> instead of a[0] ,but in the C# array starts from a[0].Is this why the first 
> value of array a[] is 0?  i only add 3 columns p.AddCols(3)  .  but it 
> works.  i want to know that if this method works in other LP problem.  could 
> it be that the GLPK read the array a[] from a[1]? the a[0] is left out. and 
> the new double[] { 0, 1.0, 1.0, 1.0 } are also the same as a[]?     but i 
> still don't know how to use the p.LoadMatrix through your GLPKSharp.dll  .    
>  the follow is the your API form translate from sample.c (i made it ,and it 
> works.this is my first time using GLPK through API and i use it in the 
> WebForm)   using System;
> using System.Data;
> using System.Configuration;
> using System.Collections;
> using System.Web;
> using System.Web.Security;
> using System.Web.UI;
> using System.Web.UI.WebControls;
>  using System.Web.UI.WebControls.WebParts;
> using System.Web.UI.HtmlControls;
> using GlpkSharp;  protected void Page_Load(object sender, EventArgs e)
>     {
>                 double z, x1, x2, x3;
>                 LPProblem p = new LPProblem();
>         p.Name = "LEO";
>          p.ObjectiveName = "test";
>         p.ObjectiveDirection = OptimisationDirection.MAXIMISE; 
>         p.AddRows(3);
>         p.SetRowName(1, "p");
>         p.SetRowBounds(1, BOUNDSTYPE.Upper, 0.0, 100.0);
>         p.SetRowName(2, "q");
>         p.SetRowBounds(2, BOUNDSTYPE.Upper, 0.0, 600.0);
>          p.SetRowName(3, "r");
>         p.SetRowBounds(3, BOUNDSTYPE.Upper, 0.0, 300.0); 
>         p.AddCols(3);
>         p.SetColName(1, "x1");
>         p.SetColBounds(1, BOUNDSTYPE.Lower, 0.0, 0.0);
>         p.SetObjCoef(1, 10.0);
>         p.SetColName(2, "x2");
>          p.SetColBounds(2, BOUNDSTYPE.Lower, 0.0, 0.0);
>         p.SetObjCoef(2, 6.0);
>         p.SetColName(3, "x3");
>         p.SetColBounds(3, BOUNDSTYPE.Lower, 0.0, 0.0);
>         p.SetObjCoef(3, 4.0);            int[] a = new int[] { 0, 1, 2, 3 };  
>        p.SetMatRow(1, a, new double[] { 0, 1.0, 1.0, 1.0 });
>         p.SetMatRow(2, a, new double[] { 0, 10.0, 4.0, 5.0 });
>         p.SetMatRow(3, a, new double[] { 0, 2.0, 2.0, 6.0 });  
>                          try
>         {             p.SolveSimplex();
>             p.WriteSol("c:\\test1.txt");
>             z = p.GetObjectiveValue();
>             x1 = p.GetColPrimal(1);
>             x2 = p.GetColPrimal(2);
>              x3 = p.GetColPrimal(3);
>             Response.Write(z + "
");
>             Response.Write(x1 + "
");
>             Response.Write(x2 + "
");
>             Response.Write(x3 + "
");
>              }
>         catch (Exception ex)
>         {
>             Response.Write(ex.Message);
>         }
>           

 Créez votre adresse électronique [email protected] 
 1 Go d'espace de stockage, anti-spam et anti-virus intégrés.
_______________________________________________
Help-glpk mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/help-glpk

Reply via email to