package edu.stanford.rsl.jpop;

import java.util.Arrays;
import java.util.concurrent.CountDownLatch;

import edu.stanford.rsl.jpop.FunctionOptimizer.OptimizationMode;

/**
 * Class to run the block evaluation in an independent Thread.
 * @author akmaier
 *
 */
public class BlockThread extends Thread {
	
	private OptimizationMode mode;
	private double [] x;
	private int block;
	private OptimizableFunction function;
	private Object result;
	private CountDownLatch latch;

	/**
	 * @return the mode
	 */
	public OptimizationMode getMode() {
		return mode;
	}
	
	/**
	 * @param mode the mode to set
	 */
	public void setMode(OptimizationMode mode) {
		this.mode = mode;
	}
	
	/**
	 * @return the x
	 */
	public double[] getX() {
		return x;
	}

	/**
	 * @param x the x to set
	 */
	public void setX(double[] x) {
		this.x = Arrays.copyOf(x, x.length);
	}

	/**
	 * @return the block
	 */
	public int getBlock() {
		return block;
	}

	/**
	 * @param block the block to set
	 */
	public void setBlock(int block) {
		this.block = block;
	}

	/**
	 * @return the function
	 */
	public OptimizableFunction getFunction() {
		return function;
	}
	
	/**
	 * @param function the function to set
	 */
	public void setFunction(OptimizableFunction function) {
		this.function = function;
	}

	/**
	 * @return the result
	 */
	public Object getResult() {
		return result;
	}

	/**
	 * @param latch the latch to set
	 */
	public void setLatch(CountDownLatch latch) {
		this.latch = latch;
	}

	/**
	 * @return the latch
	 */
	public CountDownLatch getLatch() {
		return latch;
	}

	@Override
	public void run(){
		if (mode == OptimizationMode.Function){
			result = new Double(function.evaluate(x, block));
		} else if (mode == OptimizationMode.Gradient) {
			result = ((GradientOptimizableFunction)function).gradient(x, block);
		} else if (mode == OptimizationMode.Hessian) {
			result = ((HessianOptimizableFunction) function).hessian(x, block);
		}
		latch.countDown();
	}

	
}

 

Ads help maintain this website.