/// <summary> /// Adds the output of two nodes together into a new wire /// </summary> /// <param name="inputSize">The number of connections</param> /// <param name="input1">First node</param> /// <param name="input2">Second node</param> /// <param name="name">Optional name to give the node</param> /// <returns></returns> public WireBuilder Add(int inputSize, INode input1, INode input2, string name = null) { var add = new AddGate(name); var wireToPrimary = new WireToNode(add); var wireToSecondary = new WireToNode(add, 1); input1.Output.Add(wireToPrimary); input2.Output.Add(wireToSecondary); return(new WireBuilder(this, inputSize, add)); }
private static Unit ForwardNeuron(MultiplyGate mulg0, Unit a, Unit x, MultiplyGate mulg1, Unit b, Unit y, AddGate addg0, AddGate addg1, Unit c, SigmoidGate sg0) { var ax = mulg0.Forward(a, x); // a*x = -1 var by = mulg1.Forward(b, y); // b*y = 6 var axpby = addg0.Forward(ax, by); // a*x + b*y = 5 var axpbypc = addg1.Forward(axpby, c); // a*x + b*y + c = 2 var s = sg0.Forward(axpbypc); // sig(a*x + b*y + c) = 0.8808 return(s); }
public void AddGate(GateType _type, CellCoordinates _coordinates, ObjectOrientation _orientation, GameObject _selfGameObject, int _value = 0, bool _isSwap = false) { //Check if an object is already there GridObject gridObject = gridManager.GetCell(_coordinates); if (gridObject != null) { ClearCell(_coordinates, _isSwap); gridObject = null; } switch (_type) { case GateType.Add: { gridObject = new AddGate(_coordinates, _orientation); break; } case GateType.Subtract: { gridObject = new SubtractGate(_coordinates, _orientation); break; } case GateType.Multiply: { gridObject = new MultiplyGate(_coordinates, _orientation); break; } case GateType.Divide: { gridObject = new DivideGate(_coordinates, _orientation); break; } case GateType.IncrementDecrement: { gridObject = new IncrementDecrementGate(_coordinates, _orientation, _value); break; } case GateType.Cross: { gridObject = new CrossGate(_coordinates, _orientation); break; } case GateType.Replicate: { gridObject = new ReplicateGate(_coordinates, _orientation); break; } } gridManager.InsertObject(gridObject); placedGridObjects.Add(gridObject, _selfGameObject); //Create Visual Wire Gate gate = (Gate)gridObject; uint index = 0; foreach (CellCoordinates inputCoords in gate.Inputs) { GridObject inputGridObject = gridManager.GetCell(inputCoords); if (inputGridObject != null) { if (inputGridObject.ObjectType != GridObjectType.Wire) { if (IsConnected(false, inputCoords, gridObject)) { wireVisualManager.CreateWireAndLink(inputCoords, gate.GetCoordinateForInput(index)); } } } index++; } index = 0; foreach (CellCoordinates outputCoords in gate.Outputs) { GridObject outputGridObject = gridManager.GetCell(outputCoords); if (outputGridObject != null) { if (outputGridObject.ObjectType != GridObjectType.Wire) { if (IsConnected(true, outputCoords, gridObject)) { wireVisualManager.CreateWireAndLink(_coordinates, outputCoords); } } } index++; } UpdateGiblets(_coordinates, true); }
public bool IsGridObjectValid(Vector2 _position, VisualGate _gate, bool _convertToCanvas) { GridObject gridObject = null; Vector2Int oGrid = Vector2Int.zero; if (GetGridCoordinates(_position, ref oGrid, _convertToCanvas)) { CellCoordinates cell = new CellCoordinates((uint)oGrid.x, (uint)oGrid.y); switch (_gate.gateType) { case GateType.Add: { gridObject = new AddGate(cell, _gate.objectOrientation); break; } case GateType.Subtract: { gridObject = new SubtractGate(cell, _gate.objectOrientation); break; } case GateType.Multiply: { gridObject = new MultiplyGate(cell, _gate.objectOrientation); break; } case GateType.Divide: { gridObject = new DivideGate(cell, _gate.objectOrientation); break; } case GateType.IncrementDecrement: { gridObject = new IncrementDecrementGate(cell, _gate.objectOrientation); break; } case GateType.Cross: { gridObject = new CrossGate(cell, _gate.objectOrientation); break; } case GateType.Replicate: { gridObject = new ReplicateGate(cell, _gate.objectOrientation); break; } } foreach (CellCoordinates coordinates in gridObject.Coordinates) { if (coordinates.X < 1 || coordinates.Y < 1 || coordinates.X > gridWidth || coordinates.Y > gridHeight) { return(false); } } return(true); } return(false); }