private bool CheckEveryNeighbour(OutputGrid outputGrid) { for (int row = 0; row < outputGrid.height; row++) { for (int col = 0; col < outputGrid.width; col++) { Vector2Int cellCoordinates = new Vector2Int(col, row); List <VectorPair> list = new List <VectorPair>() { new VectorPair(cellCoordinates, cellCoordinates + new Vector2Int(1, 0), Direction.Right, cellCoordinates), new VectorPair(cellCoordinates, cellCoordinates + new Vector2Int(-1, 0), Direction.Left, cellCoordinates), new VectorPair(cellCoordinates, cellCoordinates + new Vector2Int(0, 1), Direction.Up, cellCoordinates), new VectorPair(cellCoordinates, cellCoordinates + new Vector2Int(0, -1), Direction.Down, cellCoordinates) }; foreach (var item in list) { if (item.CellToPropagatePosition.x >= 0 && item.CellToPropagatePosition.x < 3 && item.CellToPropagatePosition.y >= 0 && item.CellToPropagatePosition.y < 3 && outputGrid.CheckCellExists(item.CellToPropagatePosition)) { var itemToCheck = outputGrid.GetPossibleValuesForPositon(item.CellToPropagatePosition).First(); var baseCell = outputGrid.GetPossibleValuesForPositon(cellCoordinates).First(); if (patternManager.GetPossibleNeighboursForPatternInDIrection(baseCell, item.DiectionFromBase).Contains(itemToCheck) == false) { Debug.Log(baseCell + " cant have a neighbour " + itemToCheck + " at direction " + item.DiectionFromBase.ToString()); return(false); } } } } } return(true); }
public void CoreSolverEntropyUpdatePass() { outputGrid = new OutputGrid(2, 2, patternManager.GetNumberOfPatterns()); solver = new CoreSolver(outputGrid, patternManager); var position = new Vector2Int(0, 0); solver.CollapseCell(position); solver.Propagate(); var newPosition1 = solver.GetLowestEntropyCell(); solver.CollapseCell(newPosition1); solver.Propagate(); while (solver.CheckForConflics() == false && outputGrid.CheckIfGridIsSolved() == false) { newPosition1 = solver.GetLowestEntropyCell(); solver.CollapseCell(newPosition1); solver.Propagate(); } Debug.Log(outputGrid.GetPossibleValuesForPositon(new Vector2Int(0, 1)).Count + " " + outputGrid.GetPossibleValuesForPositon(new Vector2Int(1, 1)).Count); Debug.Log(outputGrid.GetPossibleValuesForPositon(new Vector2Int(0, 0)).Count + " " + outputGrid.GetPossibleValuesForPositon(new Vector2Int(1, 0)).Count); Assert.True(solver.CheckForConflics() || outputGrid.CheckIfGridIsSolved()); }
public void CoreSolverGetLowestEntropyRandomPasses() { outputGrid = new OutputGrid(1, 1, patternManager.GetNumberOfPatterns()); solver = new CoreSolver(outputGrid, patternManager); var position = new Vector2Int(0, 0); var returnPosition = solver.GetLowestEntropyCell(); Assert.True(position == returnPosition); }
public void CoreSolverCheckLowestEntropyPasses() { outputGrid = new OutputGrid(10, 10, patternManager.GetNumberOfPatterns()); solver = new CoreSolver(outputGrid, patternManager); var position = new Vector2Int(0, 0); solver.CollapseCell(position); Assert.True(outputGrid.CheckIfCellIsCollapsed(position)); }
public void OutputGridTestCOnstructorFail() { //arrange OutputGrid outputGrid = new OutputGrid(5, 5, 10); //act //assert Assert.True(outputGrid.GetPossibleValuesForPositon(new Vector2Int(5, 5)).Count == 0); }
public void OutputGridTestOutputSolution() { //arrange OutputGrid outputGrid = new OutputGrid(5, 5, 10); //act int[][] output = outputGrid.GetSolvedOutputGrid(); //assert Assert.True(output.Length == 0); }
public void OutputGridTestCOnstructorPasses() { //arrange OutputGrid outputGrid = new OutputGrid(5, 5, 10); //act var list = outputGrid.GetPossibleValuesForPositon(new Vector2Int(4, 4)); //assert Assert.True(list.Count == 10 && list.ElementAt(0) == 0 && list.ElementAt(9) == 9); }
public void CoreSolverPropagatePass() { outputGrid = new OutputGrid(2, 2, patternManager.GetNumberOfPatterns()); solver = new CoreSolver(outputGrid, patternManager); var position = new Vector2Int(0, 0); solver.CollapseCell(position); solver.Propagate(); var numberOfPossiblePatterns = patternManager.GetNumberOfPatterns(); Assert.True(outputGrid.GetPossibleValuesForPositon(new Vector2Int(1, 0)).Count < numberOfPossiblePatterns && outputGrid.GetPossibleValuesForPositon(new Vector2Int(0, 1)).Count < numberOfPossiblePatterns); }
public void WFCCoreCheckIfSolvedTruePasses() { outputGrid = new OutputGrid(10, 10, patternManager.GetNumberOfPatterns()); solver = new CoreSolver(outputGrid, patternManager); var position = new Vector2Int(0, 0); for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { outputGrid.SetPatternOnPosition(i, j, 1); } } Assert.True(solver.CheckIfSolved()); }
public void Restart(object parameter) { try { _model.CurrentStep = 0; CircuitEvaluator eval = CircuitEvaluator.GetInstance(); _outputModel = eval.InitFromModel(_model); OutputGrid.LoadModel(_model, _outputModel); } catch (Exception e) { PrintException(e); } }
public void TileMapOutputTestSimplePasses() { //outputGrid = new OutputGrid(3, 3, patternManager.GetNumberOfPatterns()); //solver = new CoreSolver(outputGrid, patternManager); //var position = new Vector2Int(0, 0); //for (int i = 0; i < 3; i++) //{ // for (int j = 0; j < 3; j++) // { // outputGrid.SetPatternOnPosition(i, j, 1); // } //} outputGrid = new OutputGrid(5, 5, patternManager.GetNumberOfPatterns()); solver = new CoreSolver(outputGrid, patternManager); var position = new Vector2Int(0, 0); solver.CollapseCell(position); solver.Propagate(); var newPosition1 = solver.GetLowestEntropyCell(); solver.CollapseCell(newPosition1); solver.Propagate(); while (solver.CheckForConflics() == false && outputGrid.CheckIfGridIsSolved() == false) { newPosition1 = solver.GetLowestEntropyCell(); solver.CollapseCell(newPosition1); solver.Propagate(); } if (solver.CheckForConflics()) { Debug.Log("Conflict"); Assert.True(true); } else { outputGrid.PrintResultsToConsol(); int[][] wfcOutput = outputGrid.GetSolvedOutputGrid(); IOutputCreator <Tilemap> tileOutput = new TileMapOutput(valueManager, outputtilemap); tileOutput.CreateOutput(patternManager, wfcOutput, outputGrid.width, outputGrid.height); Assert.True(CheckEveryNeighbour(outputGrid)); } }
public void CoreSolverEntropyPass() { outputGrid = new OutputGrid(2, 2, patternManager.GetNumberOfPatterns()); outputGrid.SetPatternOnPosition(1, 1, 0); solver = new CoreSolver(outputGrid, patternManager); var position = new Vector2Int(0, 0); solver.CollapseCell(position); solver.Propagate(); var newPosition1 = solver.GetLowestEntropyCell(); var newPosition2 = solver.GetLowestEntropyCell(); Debug.Log(newPosition1 + " " + newPosition2); Debug.Log(outputGrid.GetPossibleValuesForPositon(new Vector2Int(0, 1)).Count + " " + outputGrid.GetPossibleValuesForPositon(new Vector2Int(1, 1)).Count); Debug.Log(outputGrid.GetPossibleValuesForPositon(new Vector2Int(0, 0)).Count + " " + outputGrid.GetPossibleValuesForPositon(new Vector2Int(1, 0)).Count); Assert.True(((newPosition1 == new Vector2Int(0, 1) || newPosition1 == new Vector2Int(1, 0)) && (newPosition2 == new Vector2Int(0, 1) || newPosition2 == new Vector2Int(1, 0))) || outputGrid.CheckIfGridIsSolved()); }
private void InitFromModel(ComputerModel model) { if (_model != null) { Dictionary <string, List <Gate> > oldComposites = _model.CompositeGates; Dictionary <string, List <Gate> > newComposites = model.CompositeGates; foreach (var pair in oldComposites) { if (!newComposites.ContainsKey(pair.Key)) { newComposites[pair.Key] = pair.Value; } } } _model = model; CircuitGrid = new CircuitGridVM(_model); CircuitEvaluator eval = CircuitEvaluator.GetInstance(); _outputModel = eval.InitFromModel(_model); OutputGrid.LoadModel(_model, _outputModel); }
/// <summary> /// Set output grid to input grid by Deep Copy output grid into input grid /// </summary> private void FlipGridState() { GridHelper.Copy(OutputGrid, InputGrid); OutputGrid.ReInitialize(); }