Sample2.java

/*
 * Created on 2011/02/23
 * Copyright (C) 2011 Koga Laboratory. All rights reserved.
 *
 */
package org.mklab.sdpj;

import java.io.IOException;

import org.mklab.mpf.ap.MPFloat;
import org.mklab.mpf.ap.MPFloatComplexMatrix;
import org.mklab.mpf.ap.MPFloatComplexNumber;
import org.mklab.mpf.ap.MPFloatMatrix;
import org.mklab.nfc.matrix.ComplexNumericalMatrix;
import org.mklab.nfc.matrix.RealNumericalMatrix;
import org.mklab.nfc.scalar.ComplexNumericalScalar;
import org.mklab.nfc.scalar.RealNumericalScalar;
import org.mklab.sdpj.solver.Sdpj;


/**
 * The Class Sample2 is a sample usage of SDPJ.
 * 
 * More detail information about usage, you can refer to Class {@link org.mklab.sdpj.solver.Sdpj}, or you can call the function Sdpj.showUsage().
 * 
 * And if you run SDPJ based on multiple precision arithmetic and occur the exception as follows:
 * 
 * Exception in thread "main" java.lang.ExceptionInInitializerError at org.mklab.jsdpa.example.Sample2.main(Sample2.java:39) Caused by: java.lang.RuntimeException:
 * There is not an available library. at org.mklab.mpf.MPFloat.getDefaultBaseMPF(MPFloat.java:93) at org.mklab.mpf.MPFloat.(MPFloat.java:82) ... 1 more
 * 
 * This time you should set an attribute of run based on eclipse as like:
 * 
 * Firstly, click "Run" -- click "Run Configurations..." -- click "(x)= arguments"
 * 
 * Lastly, set the value "-Djava.library.path="${workspace_loc}/MPFloat;${workspace_loc}/cga""
 * 
 * on the frame of VM arguments.
 * 
 * @author wu
 * @version 0.6.3, 2011/02/23
 * 
 */
public class Sample2 {

  /**
   * @param args command line arguments
   * @throws IOException when
   */
  public static void main(String[] args) throws IOException {
    Sample2Run<MPFloat, MPFloatMatrix, MPFloatComplexNumber, MPFloatComplexMatrix> run = new Sample2Run<>(new MPFloat(1));
    run.run();

    //		 for (int i = 1; i <= 11; i++) {
    //			 run.run("sdplib/control" + i + ".dat-s");
    //		 }
  }
}





class Sample2Run<RS extends RealNumericalScalar<RS, RM, CS, CM>, RM extends RealNumericalMatrix<RS, RM, CS, CM>, CS extends ComplexNumericalScalar<RS, RM, CS, CM>, CM extends ComplexNumericalMatrix<RS, RM, CS, CM>> {

  RS sdpjType;

  public Sample2Run(RS type) {
    // TODO 自動生成されたコンストラクター・スタブ
    this.sdpjType = type;
  }

  public void run() throws IOException {
    final String ProblemFile = "sdplib/example_sdplib.dat-s"; //$NON-NLS-1$

    //SDPJ based on multiple precision arithmetic
    //Example 1 
    Sdpj<RS, RM, CS, CM> sdpj1 = new Sdpj<>(this.sdpjType, ProblemFile);
    sdpj1.setPrecision(16);
    sdpj1.run();

    //    //Example 2
    //    Sdpj<MPFloat> sdpj2 = new Sdpj<MPFloat>(ProblemFile);
    //    sdpj2.setDataType(new MPFloat(1));
    //    sdpj2.run();
    //
    //    //SDPJ based on double precision arithmetic
    //    //Example 3
    //    Sdpj<DoubleNumber> sdpj3 = new Sdpj<DoubleNumber>(new DoubleNumber(1), ProblemFile);
    //    sdpj3.run();
    //    //Example 4
    //    Sdpj<DoubleNumber> sdpj4 = new Sdpj<DoubleNumber>(ProblemFile);
    //    sdpj4.setDataType(new DoubleNumber(1));
    //    sdpj4.run();
    //
    //    //show the usage of SDPJ
    //    Sdpj.showUsage();
  }

  /**
   * @param problemFile problem file
   * @throws IOException when
   */
  public void run(String problemFile) throws IOException {
    Sdpj<RS, RM, CS, CM> sdpj1 = new Sdpj<>(this.sdpjType, problemFile);
    sdpj1.setPrecision(16);
    sdpj1.run();
  }
}