Package model.MARK_II.parameters

Source Code of model.MARK_II.parameters.SDRScoreCalculatorTest

package model.MARK_II.parameters;

import junit.framework.TestCase;
import model.MARK_II.ColumnPosition;
import model.MARK_II.Region;
import model.MARK_II.SpatialPooler;
import model.MARK_II.connectTypes.AbstractSensorCellsToRegionConnect;
import model.MARK_II.connectTypes.SensorCellsToRegionRectangleConnect;
import model.Retina;

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

/**
* @author Quinn Liu (quinnliu@vt.edu)
* @version Apr 16, 2014
*/
public class SDRScoreCalculatorTest extends TestCase {
    private Set<ColumnPosition> columnActivityAfterSeeingImage2;
    private Set<ColumnPosition> columnActivityWithBadSDRScore;
    private Set<ColumnPosition> columnActivityWithMediumSDRScore;
    private Set<ColumnPosition> columnActivityWithGoodSDRScore;

    private double desiredPercentageOfActiveColumns;
    private int totalNumberOfColumnsInRegion;

    private SDRScoreCalculator sdrScoreCalculator;

    public void setUp() throws IOException {
        this.setUpColumnActivityAfterSeeingImage2();
        this.setUpColumnActivityWithBadSDRScore();
        this.setUpColumnActivityWithMediumSDRScore();
        this.setUpColumnActivityWithGoodSDRScore();

        // set up SDRScoreCalculator
        this.desiredPercentageOfActiveColumns = 10.0;
        this.totalNumberOfColumnsInRegion = 64;

        this.sdrScoreCalculator = new SDRScoreCalculator(
                columnActivityAfterSeeingImage2,
                this.desiredPercentageOfActiveColumns,
                totalNumberOfColumnsInRegion);
    }

    private void setUpColumnActivityAfterSeeingImage2() throws IOException {
        Retina retina = new Retina(66, 66);
        Region region = new Region("Region", 8, 8, 1, 50, 3);

        AbstractSensorCellsToRegionConnect retinaToRegion = new SensorCellsToRegionRectangleConnect();
        retinaToRegion.connect(retina.getVisionCells(), region, 0, 0);

        SpatialPooler spatialPooler = new SpatialPooler(region);
        spatialPooler.setLearningState(true);

        retina.seeBMPImage("2.bmp");

        spatialPooler.performPooling(); // 11 active columns
        this.columnActivityAfterSeeingImage2 = spatialPooler
                .getActiveColumnPositions();
        // = (6,5)(6, 3)(6, 2)(5, 3)(3, 5)(2, 2)(1, 3)(1, 2)(2, 5)(1, 5)(4, 4)
    }

    private void setUpColumnActivityWithBadSDRScore() {
        // imagine a region that is 8 by 8 columns
        ColumnPosition columnPosition00 = new ColumnPosition(0, 0);
        ColumnPosition columnPosition01 = new ColumnPosition(0, 1);
        ColumnPosition columnPosition10 = new ColumnPosition(1, 0);
        ColumnPosition columnPosition11 = new ColumnPosition(1, 1);
        ColumnPosition columnPosition02 = new ColumnPosition(0, 2);
        ColumnPosition columnPosition20 = new ColumnPosition(2, 0);
        this.columnActivityWithBadSDRScore = new HashSet<ColumnPosition>();
        this.columnActivityWithBadSDRScore.add(columnPosition00);
        this.columnActivityWithBadSDRScore.add(columnPosition01);
        this.columnActivityWithBadSDRScore.add(columnPosition10);
        this.columnActivityWithBadSDRScore.add(columnPosition11);
        this.columnActivityWithBadSDRScore.add(columnPosition02);
        this.columnActivityWithBadSDRScore.add(columnPosition20);
    }

    private void setUpColumnActivityWithMediumSDRScore() {
        // imagine a region that is 8 by 8 columns
        ColumnPosition columnPosition00 = new ColumnPosition(0, 0);
        ColumnPosition columnPosition01 = new ColumnPosition(0, 1);
        ColumnPosition columnPosition10 = new ColumnPosition(1, 1);
        ColumnPosition columnPosition11 = new ColumnPosition(2, 2);
        ColumnPosition columnPosition02 = new ColumnPosition(3, 3);
        ColumnPosition columnPosition20 = new ColumnPosition(4, 4);
        this.columnActivityWithMediumSDRScore = new HashSet<ColumnPosition>();
        this.columnActivityWithMediumSDRScore.add(columnPosition00);
        this.columnActivityWithMediumSDRScore.add(columnPosition01);
        this.columnActivityWithMediumSDRScore.add(columnPosition10);
        this.columnActivityWithMediumSDRScore.add(columnPosition11);
        this.columnActivityWithMediumSDRScore.add(columnPosition02);
        this.columnActivityWithMediumSDRScore.add(columnPosition20);
    }

    private void setUpColumnActivityWithGoodSDRScore() {
        // imagine a region that is 8 by 8 columns
        ColumnPosition columnPosition00 = new ColumnPosition(0, 0);
        ColumnPosition columnPosition01 = new ColumnPosition(0, 7);
        ColumnPosition columnPosition10 = new ColumnPosition(7, 0);
        ColumnPosition columnPosition11 = new ColumnPosition(2, 2);
        ColumnPosition columnPosition02 = new ColumnPosition(5, 5);
        ColumnPosition columnPosition20 = new ColumnPosition(7, 7);
        this.columnActivityWithGoodSDRScore = new HashSet<ColumnPosition>();
        this.columnActivityWithGoodSDRScore.add(columnPosition00);
        this.columnActivityWithGoodSDRScore.add(columnPosition01);
        this.columnActivityWithGoodSDRScore.add(columnPosition10);
        this.columnActivityWithGoodSDRScore.add(columnPosition11);
        this.columnActivityWithGoodSDRScore.add(columnPosition02);
        this.columnActivityWithGoodSDRScore.add(columnPosition20);
    }

    public void test_computeSparsityScore() {
        // setup with column activity after seeing image 2
        assertEquals(-1.12, this.sdrScoreCalculator.computeSparsityScore(),
                0.01);

        this.sdrScoreCalculator.updateParameters(
                this.columnActivityWithBadSDRScore,
                this.desiredPercentageOfActiveColumns,
                this.totalNumberOfColumnsInRegion);

        assertEquals(-1.0, this.sdrScoreCalculator.computeSparsityScore(), 0.01);

        this.sdrScoreCalculator.updateParameters(
                this.columnActivityWithMediumSDRScore,
                this.desiredPercentageOfActiveColumns,
                this.totalNumberOfColumnsInRegion);

        assertEquals(-1.20, this.sdrScoreCalculator.computeSparsityScore(),
                0.01);

        this.sdrScoreCalculator.updateParameters(
                this.columnActivityWithGoodSDRScore,
                this.desiredPercentageOfActiveColumns,
                this.totalNumberOfColumnsInRegion);

        assertEquals(-3.68, this.sdrScoreCalculator.computeSparsityScore(),
                0.01);
    }

    public void test_computeNumberOfActiveColumnsScore() {
        assertEquals(-0.2,
                this.sdrScoreCalculator.computeNumberOfActiveColumnsScore(),
                0.01);

        this.sdrScoreCalculator.updateParameters(
                this.columnActivityWithBadSDRScore, // this set has the exact
                // number of desired columns
                this.desiredPercentageOfActiveColumns,
                this.totalNumberOfColumnsInRegion);

        assertEquals(-10.0,
                this.sdrScoreCalculator.computeNumberOfActiveColumnsScore(),
                0.01);
    }

    public void test_computeSDRScore() {
        assertEquals(-1.32, this.sdrScoreCalculator.computeSDRScore(), 0.01);
    }
}
TOP

Related Classes of model.MARK_II.parameters.SDRScoreCalculatorTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.