AverageComplementarity.java
package org.mklab.sdpj.algorithm;
import java.io.PrintStream;
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.algebra.AlgebraWithEFFloat;
import org.mklab.sdpj.tool.Tools;
/**
* @author takafumi
* @param <RS> type of real scalar
* @param <RM> type of real matrix
* @param <CS> type of complex scalar
* @param <CM> type of complex Matrix
*/
public class AverageComplementarity<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>> {
/** 初期値 */
private RS initialValue;
/** 現在の値 */
private RS value;
/**
* 新しく生成された<code>AverageComplementarity</code>オブジェクトを初期化します。
*
* @param lambdaStar .
*/
public AverageComplementarity(RS lambdaStar) {
this.initialValue = lambdaStar.multiply(lambdaStar);
this.value = this.initialValue;
}
/**
* @param nDim ,
* @param initPt .
*/
public AverageComplementarity(int nDim, Solution<RS,RM,CS,CM> initPt) {
// this.initialValue = Algebra.run(initPt.getXmat(), '.', initPt.getZmat());
this.initialValue = AlgebraWithEFFloat.run(initPt.getXmat(), '.', initPt.getZmat());
this.initialValue = this.initialValue.divide(nDim);// /= nDim;
this.value = this.initialValue;
}
/**
* @param nDim ,
* @param currentPt .
*/
public void update(int nDim, Solution<RS,RM,CS,CM> currentPt) {
// RS xy = Algebra.run(currentPt.getXmat(), '.', currentPt.getZmat());
RS xy = AlgebraWithEFFloat.run(currentPt.getXmat(), '.', currentPt.getZmat());
RS mu = xy.divide(nDim);
this.value = mu;// /= nDim;
}
/**
* @param ps .
*/
public void display(PrintStream ps) {
ps.println(toString());
}
/**
*
*/
public void display() {
Tools.message(this.toString());
}
/**
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "mu0 = " + this.initialValue + "\nmu = " + this.value + "\n"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
/**
* @return initialを返します。
*/
public RS getInitialValue() {
return this.initialValue;
}
/**
* @return valueを返します。
*/
public RS getValue() {
return this.value;
}
}