アットウィキロゴ

lpxd

import java.util.*;

public class game{

int n;            
int m;            
double[][] a;  
                        
public void simplex(){
    int p,q;
    double d,k,pivo;
    double min;
    while (true) {
      p=0; q=0;
      d=0; k=0; pivo=0;
      
      min = 10000;
      for(int i=0; i<n;  i++) {
        if ( a[m][i] < min ) {
          min = a[m][i];
          q = i;
        }
      }
      if ( min == 0 ) break; // 最小値>=0 なら終了  

      min = 10000;
      for(int i=0; i<m;  i++) {
        k = a[i][n+m]/a[i][q];
        if ( a[i][q] > 0  &&  k < min ) {
          min = k;
          p = i;
        }
      }
      
      pivo = a[p][q]; // ピボット要素
      //ピボット行の要素をピボット要素で割る
      for(int i=0; i<=n+m;  i++) {
        a[p][i] = a[p][i]/pivo;
      }
      
      // 掃き出し
      for(int i=0; i<=m;  i++) {
        if ( i != p ) {
          d = a[i][q];
          for(int j=0; j<n+m+1;  j++) {
            a[i][j] = a[i][j] - a[p][j]*d;
          }
        }
      }
    }
}


public void prnAns() {
   System.out.println("[ 答え ] ");
   for(int i=0; i<n;  i++){
     int mark = -1;
     for(int j=0; j<m;  j++){
       if ( a[j][i] == 1 )  mark = j;
     }
     if ( mark != -1 ) {
       System.out.println(" x" + (i+1) + "=" + a[mark][n+m]);
     }
   }
     System.out.println(" f(x)の最大値 = " + a[m][n+m]);
}

}  
最終更新:2011年08月22日 07:04