Home
   News
   About the project
   Language
   Compiler download
   Test suite
   Blog on the programming model
   Zonnon @ OCP Forum
   Collection of examples

TEST: 17EXMODIFSIMPLEXMETHOD-C

category

status

Compilation and execution results for Windows (first) and Mono (second)
PASSED Compiler: 1.2.8.0
Date, time: 2010.08.06, 18:06
Compilation: SUCCESS
Execution: NOT RUN
(111, 14) Use of possibly unassigned local variable 'Jn'.
(107, 3) Use of possibly unassigned local variable 'cb'.
(110, 3) Use of possibly unassigned local variable 'cn'.
(108, 3) Use of possibly unassigned local variable 'B'.
(111, 3) Use of possibly unassigned local variable 'N'.
(69, 2) The variable 'm' is assigned but its value is never used.
PASSED Compiler: 1.2.8.0
Date, time: 2010.08.06, 22:22
Compilation: SUCCESS
Execution: NOT RUN
(111, 14) Use of possibly unassigned local variable 'Jn'.
(107, 3) Use of possibly unassigned local variable 'cb'.
(110, 3) Use of possibly unassigned local variable 'cn'.
(108, 3) Use of possibly unassigned local variable 'B'.
(111, 3) Use of possibly unassigned local variable 'N'.
(69, 2) The variable 'm' is assigned but its value is never used.
(0, 0) Assembly reference not resolved: System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a.

code

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  
57  
58  
59  
60  
61  
62  
63  
64  
65  
66  
67  
68  
69  
70  
71  
72  
73  
74  
75  
76  
77  
78  
79  
80  
81  
82  
83  
84  
85  
86  
87  
88  
89  
90  
91  
92  
93  
94  
95  
96  
97  
98  
99  
100  
101  
102  
103  
104  
105  
106  
107  
108  
109  
110  
111  
112  
113  
114  
115  
116  
117  
118  
119  
120  
121  
122  
123  
124  
125  
126  
127  
128  
129  
130  
131  
 (*************************************************************************  
 Solving a linear programming problem.  
   
 Solving a linear programming problem:  
 Maximize (cx)   
 if Ax <= b  
 using modified simplex method.  
   
 Method description: http://en.wikipedia.org/wiki/Simplex_method  
   
 Author: Nina Gonova                       
 Last change: 13.04.2009  
 **************************************************************************)  
   
 module ModifSimplexMethodAdv;  
        
 type {public} TypeOfArray = real;  
 type {publicref} Vector = array {math} * of TypeOfArray;  
 type {publicref} Matrix = array {math} *, * of TypeOfArray;  
 type {publicref} VectorInt = array {math} * of integer;  
   
 (*for vector indexes; returns elements of V, which indices are not in 0:(n-1)*)  
 procedure GetRestVectorInt(V : VectorInt; n : integer) : VectorInt;  
 var  
      VRes : VectorInt;  
      lenVRes, i, j, k : integer;  
 begin  
      lenVRes := n - len(V);  
      VRes := new VectorInt(lenVRes);  
      k := 0;  
        
      for i := 0 to n - 1 do  
           j := 0;  
           loop  
                if j = len(V) then  
                     exit;  
                end;  
                if V[j] = i then  
                     exit;  
                end;  
                inc(j);  
           end;  
           if j = len(V) then  
                VRes[k] := i;  
                inc(k);  
           end;  
      end;  
        
      return VRes;  
 end GetRestVectorInt;  
   
   
 (*Solution of linear programming problem*)  
 (*Jb = numbers of columns, which form starting admissible base*)  
 procedure {public} Solution(Q : Matrix; c, b : Vector; Jb : VectorInt) : Vector;  
 var  
      B, N : Matrix; (*B = basic matrix, N = not basic matrix*)  
      i, j, s, r : integer; (*s = leading column, r = leading row*)       
      V, u, a : Vector; (*V = the result*)  
      Jn : VectorInt; (*Jn = column numbers, which are not in B*)  
      cn, cb : Vector; (*_n = not basic, _b = basic*)  
      m, n : integer; (*m = NRows, n = NCols*)  
      VBool : array {math} * of boolean;  
      help_vr : array {math} * of real;  
   
 begin  
   
      V := nil;  
      m := len(b);  
      n := len(c);  
        
      Jn := GetRestVectorInt(Jb, n);  
        
      cb := c[Jb]; (*vector: (c[Jb[1]], ... , c[Jb[len(Jb)-1]])*)  
      cn := c[Jn]; (*vector: (c[Jn[1]], ... , c[Jn[len(Jn)-1]])*)  
      B := Q[.., Jb];  
      N := Q[.., Jn];  
        
      loop            
           u := cb / B;  
           b := B \ b;  
           cn := cn - u*N;  
             
           (*chose s, but this s corresponds N, not Q*)  
           VBool := cn .< 0;  
           if all(~VBool) = true then     (*Current vector is not optimal yet*)  
                V := new Vector(n);  
                V[Jb] := b;  
                exit;  
           end;  
             
           s := find(VBool) [0];     (*find(VBool) finds indices of true elements*) (*or find(VBool, true), see MatLab*)  
                  
           a := B \ N[.., s];  
             
           (*chose r*)  
           VBool := a .> 0;  
           if all(VBool) = false then  
                return nil;          (*max cx = infinity*)  
           end;  
             
           (*r := minind(b[VBool] / a[VBool]);*)  
           help_vr := b[VBool] ./ a[VBool];  
           r := find(min(help_vr), help_vr) [0];  
             
           (*change base*)  
           cb[r] := c[s];  
           B[.., r] := Q[.., s];  
           Jb[r] := s;       
           cn := c[Jn];  
           N := Q[.., Jn];                 
      end;  
        
      return V;  
   
 end Solution;  
   
   
 begin  
   
 end ModifSimplexMethodAdv.  
   
 (***********)  
   
 module Main;  
   
 begin  
   
 end Main.  
   
   

information

  • PASSED - overall positive decision about the test
  • NOT PASSED - overall negative decision about the test
  • SUCCESS - compilation / execution successful
  • ERROR - compilation failed with normal syntax or semantic error
  • ABORT - compilation failed because of an internal compiler error
  • NOT RUN - the test was not / not supposed to be executed
  • FAIL - execution failed
Copyright © 2010 ETH Zurich, Switzerland