示例#1
0
    public static void Main()
    {
        const double
            infinity = 0;

        mosek.boundkey[] bkc = new mosek.boundkey[] {
            mosek.boundkey.up, mosek.boundkey.up,
            mosek.boundkey.up, mosek.boundkey.fx,
            mosek.boundkey.fx, mosek.boundkey.fx,
            mosek.boundkey.fx
        };

        mosek.boundkey[] bkx = new mosek.boundkey[] {
            mosek.boundkey.lo, mosek.boundkey.lo,
            mosek.boundkey.lo, mosek.boundkey.lo,
            mosek.boundkey.lo, mosek.boundkey.lo,
            mosek.boundkey.lo
        };

        int[]    ptrb = new int[] { 0, 2, 4, 6, 8, 10, 12 };
        int[]    ptre = new int[] { 2, 4, 6, 8, 10, 12, 14 };
        int[]    sub  = new int[] { 0, 3, 0, 4, 1, 5, 1, 6, 2, 3, 2, 5, 2, 6 };
        double[] blc  = new double[] {
            -infinity, -infinity,
            -infinity, 800, 100, 500, 500
        };

        double[] buc = new double[] { 400, 1200, 1000, 800, 100, 500, 500 };
        double[] c   = new double[] { 1.0, 2.0, 5.0, 2.0, 1.0, 2.0, 1.0 };
        double[] blx = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
        double[] bux = new double[] { infinity,
                                      infinity,
                                      infinity,
                                      infinity,
                                      infinity,
                                      infinity,
                                      infinity };

        double[] val = new double[] { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
                                      1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 };

        int numcon = 7; /* Number of constraints.             */
        int numvar = 7; /* Number of variables.               */

        try
        {
            using (mosek.Env env = new mosek.Env())
            {
                using (mosek.Task task = new mosek.Task(env))
                {
                    // Directs the log task stream to the user specified
                    // method task_msg_obj.streamCB
                    task.set_Stream(mosek.streamtype.log, new msgclass("[task]"));

                    task.inputdata(numcon, numvar,
                                   c,
                                   0.0,
                                   ptrb,
                                   ptre,
                                   sub,
                                   val,
                                   bkc,
                                   blc,
                                   buc,
                                   bkx,
                                   blx,
                                   bux);

                    /* A maximization problem */
                    task.putobjsense(mosek.objsense.minimize);

                    try
                    {
                        task.optimize();
                    }
                    catch (mosek.Warning w)
                    {
                        Console.WriteLine("Mosek warning:");
                        Console.WriteLine(w.Code);
                        Console.WriteLine(w);
                    }


                    /* Analyze upper bound on c1 and the equality constraint on c4 */
                    int[]        subi  = new int [] { 0, 3 };
                    mosek.mark[] marki = new mosek.mark[] { mosek.mark.up,
                                                            mosek.mark.up };

                    /* Analyze lower bound on the variables x12 and x31 */
                    int[]        subj  = new int [] { 1, 4 };
                    mosek.mark[] markj = new mosek.mark[] { mosek.mark.lo,
                                                            mosek.mark.lo };

                    double[] leftpricei  = new  double[2];
                    double[] rightpricei = new  double[2];
                    double[] leftrangei  = new  double[2];
                    double[] rightrangei = new  double[2];
                    double[] leftpricej  = new  double[2];
                    double[] rightpricej = new  double[2];
                    double[] leftrangej  = new  double[2];
                    double[] rightrangej = new  double[2];


                    task.primalsensitivity(subi,
                                           marki,
                                           subj,
                                           markj,
                                           leftpricei,
                                           rightpricei,
                                           leftrangei,
                                           rightrangei,
                                           leftpricej,
                                           rightpricej,
                                           leftrangej,
                                           rightrangej);

                    Console.Write("Results from sensitivity analysis on bounds:\n");

                    Console.Write("For constraints:\n");
                    for (int i = 0; i < 2; ++i)
                    {
                        Console.Write(
                            "leftprice = {0}, rightprice = {1},leftrange = {2}, rightrange ={3}\n",
                            leftpricei[i], rightpricei[i], leftrangei[i], rightrangei[i]);
                    }

                    Console.Write("For variables:\n");
                    for (int i = 0; i < 2; ++i)
                    {
                        Console.Write(
                            "leftprice = {0}, rightprice = {1},leftrange = {2}, rightrange ={3}\n",
                            leftpricej[i], rightpricej[i], leftrangej[i], rightrangej[i]);
                    }


                    double[] leftprice  = new  double[2];
                    double[] rightprice = new  double[2];
                    double[] leftrange  = new  double[2];
                    double[] rightrange = new  double[2];
                    int[]    subc       = new int[] { 2, 5 };

                    task.dualsensitivity(subc,
                                         leftprice,
                                         rightprice,
                                         leftrange,
                                         rightrange
                                         );

                    Console.Write("Results from sensitivity analysis on objective coefficients:");

                    for (int i = 0; i < 2; ++i)
                    {
                        Console.Write(
                            "leftprice = {0}, rightprice = {1},leftrange = {2}, rightrange = {3}\n",
                            leftprice[i], rightprice[i], leftrange[i], rightrange[i]);
                    }
                }
            }
        }
        catch (mosek.Exception e)
        {
            Console.WriteLine(e.Code);
            Console.WriteLine(e);
            throw;
        }
    }
示例#2
0
    public static void Main ()
    {
      const double
        infinity = 0;            
    
      mosek.boundkey[] bkc = new mosek.boundkey[]{
      mosek.boundkey.up,mosek.boundkey.up,
      mosek.boundkey.up,mosek.boundkey.fx,
      mosek.boundkey.fx,mosek.boundkey.fx,
      mosek.boundkey.fx
      };

      mosek.boundkey[] bkx = new mosek.boundkey[]{
      mosek.boundkey.lo,mosek.boundkey.lo,
      mosek.boundkey.lo,mosek.boundkey.lo,
      mosek.boundkey.lo,mosek.boundkey.lo,
      mosek.boundkey.lo};

      int[] ptrb= new int[]{0,2,4,6,8,10,12};
      int[] ptre= new int[]{2,4,6,8,10,12,14};
      int[] sub = new int[]{0,3,0,4,1,5,1,6,2,3,2,5,2,6};
      double[] blc = new double[]{
      -infinity,-infinity,
      -infinity,800,100,500,500};

      double[] buc = new double[]{400,1200,1000,800,100,500,500};
      double[] c   = new double[]{1.0,2.0,5.0,2.0,1.0,2.0,1.0};
      double[] blx = new double[]{0.0,0.0,0.0,0.0,0.0,0.0,0.0};
      double[] bux = new double[]{infinity,
                                  infinity,
                                  infinity,
                                  infinity,
                                  infinity,
                                  infinity,
                                  infinity};

      double[] val = new double[]{1.0,1.0,1.0,1.0,1.0,1.0,1.0,
                                  1.0,1.0,1.0,1.0,1.0,1.0,1.0};

      int numcon = 7;  /* Number of constraints.             */
      int numvar = 7;  /* Number of variables.               */
      try
      {
        using (mosek.Env env = new mosek.Env())
        { 
          using (mosek.Task task = new mosek.Task(env))
          {
            // Directs the log task stream to the user specified
            // method task_msg_obj.streamCB
            task.set_Stream(mosek.streamtype.log, new msgclass ("[task]"));
        
            task.inputdata(numcon,numvar,
                           c,
                           0.0,
                           ptrb,
                           ptre,
                           sub,
                           val,
                           bkc,
                           blc,
                           buc,
                           bkx,
                           blx,
                           bux);
              
            /* A maximization problem */ 
            task.putobjsense(mosek.objsense.minimize);

            try
              {
                task.optimize();
              }
            catch (mosek.Warning w)
              {
                Console.WriteLine("Mosek warning:");
                Console.WriteLine (w.Code);
                Console.WriteLine (w);
              }
              

            /* Analyze upper bound on c1 and the equality constraint on c4 */ 
            int[] subi  = new int []{0,3};         
            mosek.mark[] marki = new mosek.mark[]{mosek.mark.up,
                                                          mosek.mark.up};

            /* Analyze lower bound on the variables x12 and x31 */ 
            int[] subj  = new int []{1,4};
            mosek.mark[] markj = new mosek.mark[] {mosek.mark.lo,
                                                           mosek.mark.lo};
         
            double[] leftpricei  = new  double[2];
            double[] rightpricei = new  double[2];  
            double[] leftrangei  = new  double[2];
            double[] rightrangei = new  double[2];
            double[] leftpricej  = new  double[2];
            double[] rightpricej = new  double[2];
            double[] leftrangej  = new  double[2];
            double[] rightrangej = new  double[2];

          
            task.primalsensitivity( subi, 
                                    marki,  
                                    subj,
                                    markj, 
                                    leftpricei,   
                                    rightpricei,
                                    leftrangei, 
                                    rightrangei,
                                    leftpricej,   
                                    rightpricej,
                                    leftrangej, 
                                    rightrangej);

            Console.Write("Results from sensitivity analysis on bounds:\n");

            Console.Write("For constraints:\n");
            for (int i=0;i<2;++i)
              Console.Write(
              "leftprice = {0}, rightprice = {1},leftrange = {2}, rightrange ={3}\n",
               leftpricei[i], rightpricei[i], leftrangei[i], rightrangei[i]);
                  
            Console.Write("For variables:\n");
            for (int i=0;i<2;++i)
              Console.Write(
              "leftprice = {0}, rightprice = {1},leftrange = {2}, rightrange ={3}\n",
               leftpricej[i], rightpricej[i], leftrangej[i], rightrangej[i]);   
                      

            double[] leftprice  = new  double[2];
            double[] rightprice = new  double[2];
            double[] leftrange  = new  double[2];
            double[] rightrange = new  double[2];
            int[] subc = new int[]{2,5};
         
            task.dualsensitivity(  subc,
                                   leftprice,
                                   rightprice,
                                   leftrange,
                                   rightrange
                                   );

            Console.Write("Results from sensitivity analysis on objective coefficients:");
      
            for (int i=0;i<2;++i)
              Console.Write(
              "leftprice = {0}, rightprice = {1},leftrange = {2}, rightrange = {3}\n",
              leftprice[i], rightprice[i], leftrange[i], rightrange[i]);               
          }
        }
      }
      catch (mosek.Exception e)
        {
          Console.WriteLine (e.Code);
          Console.WriteLine (e);
          throw;
        }
    }