示例#1
0
    def test_control_signal_intensity_cost_function(self):

        mech = TransferMechanism()
        ctl_sig = ControlSignal(projections=[(SLOPE, mech)],
                                intensity_cost_function=Exponential(rate=1))
        ctl_mech = ControlMechanism(control_signals=[ctl_sig])
        ctl_mech.execute()
        assert True
    def test_params_for_modulatory_projection_in_parameter_port(self):

        T1 = TransferMechanism()
        T2 = TransferMechanism()
        CTL = ControlMechanism(control=ControlSignal(projections=('slope',T2)))
        C = Composition(pathways=[[T1,T2,CTL]])

        # Run 0
        C.run(inputs={T1: 2.0},
              runtime_params={
                  T2: {
                      PARAMETER_PORT_PARAMS: {
                          CONTROL_PROJECTION_PARAMS: {
                              'variable':(5, AtTrial(3)), # variable of all Projection to all ParameterPorts
                              'value':(10, AtTrial(4)),
                              'value':(21, AtTrial(5)),
                          },
                          # Test individual Projection specifications outside of type-specific dict
                          CTL.control_signals[0].efferents[0]: {'value':(32, AtTrial(6))},
                          'ControlProjection for TransferMechanism-1[slope]': {'value':(43, AtTrial(7))},
                      }
                  },
              },
              num_trials=8
              )
        CTL.control_signals[0].modulation = OVERRIDE
        # Run 1
        C.run(inputs={T1: 2.0},
              runtime_params={
                  T2: {
                      PARAMETER_PORT_PARAMS: {
                          CONTROL_PROJECTION_PARAMS: {
                              'value':(5, Any(AtTrial(0), AtTrial(2))),
                              'variable':(10, AtTrial(1)),
                              # Test individual Projection specifications inside of type-specific dict
                              'ControlProjection for TransferMechanism-1[slope]': {'value':(19, AtTrial(3))},
                              CTL.control_signals[0].efferents[0]: {'value':(33, AtTrial(4))},
                          },
                      }
                  },
              },
              num_trials=5
              )

        assert np.allclose(C.results,[         # Conditions satisfied:
            np.array([[2]]),   # Run 0, Trial 0: None (2 input; no control since that requires a cycle)
            np.array([[4]]),   # Run 0, Trial 1: None (2 input * 2 control gathered last cycle)
            np.array([[8]]),   # Run 0, Trial 2: None (2 input * 4 control gathered last cycle)
            np.array([[10]]),  # Run 0, Trial 3: ControlProjection variable (2*5)
            np.array([[20]]),  # Run 0, Trial 4: ControlProjection value (2*10)
            np.array([[42]]),  # Run 0, Trial 5: ControlProjection value using Projection type-specific keyword (2*210)
            np.array([[64]]),  # Run 0, Trial 6: ControlProjection value using individual Projection (2*32)
            np.array([[86]]),  # Run 0, Trial 7: ControlProjection value using individual Projection by name (2*43)
            np.array([[10]]),  # Run 1, Tria1 0: ControlProjection value with OVERRIDE using value (2*5)
            np.array([[20]]),  # Run 1, Tria1 1: ControlProjection value with OVERRIDE using variable (2*10)
            np.array([[10]]),  # Run 1, Tria1 2: ControlProjection value with OVERRIDE using value again (in Any) (2*5)
            np.array([[38]]),  # Run 1, Tria1 3: ControlProjection value with OVERRIDE using individ Proj by name (2*19)
            np.array([[66]]),  # Run 1: Trial 4: ControlProjection value with OVERRIDE using individ Proj  (2*33)
        ])
 def test_alias_equivalence_for_modulates_and_projections(self):
     inputs = [1, 9, 4, 3, 2]
     comp1 = Composition()
     tMech1 = TransferMechanism()
     tMech2 = TransferMechanism()
     cMech1 = ControlMechanism(
         control_signals=ControlSignal(modulates=(SLOPE, tMech2)),
         objective_mechanism=ObjectiveMechanism(monitor=(RESULT, tMech2)))
     comp1.add_nodes([tMech1, tMech2, cMech1])
     comp1.add_linear_processing_pathway([cMech1, tMech1, tMech2])
     comp1.run(inputs=inputs)
     comp2 = Composition()
     tMech3 = TransferMechanism()
     tMech4 = TransferMechanism()
     cMech2 = ControlMechanism(
         control_signals=ControlSignal(projections=(SLOPE, tMech4)),
         objective_mechanism=ObjectiveMechanism(monitor=(RESULT, tMech4)))
     comp2.add_nodes([tMech3, tMech4, cMech2])
     comp2.add_linear_processing_pathway([cMech2, tMech3, tMech4])
     comp2.run(inputs=inputs)
     assert comp1.results == comp2.results
示例#4
0
 def test_parameter_CIM_routing_from_ControlMechanism(self):
     # Inner Composition
     ia = TransferMechanism(name='ia')
     ib = TransferMechanism(name='ib')
     icomp = Composition(name='icomp', pathways=[ia])
     # Outer Composition
     ocomp = Composition(name='ocomp', pathways=[icomp])
     cm = ControlMechanism(
         name='control_mechanism',
         control_signals=ControlSignal(projections=[(SLOPE, ib)]))
     icomp.add_linear_processing_pathway([ia, ib])
     ocomp.add_linear_processing_pathway([cm, icomp])
     res = ocomp.run([[2], [2], [2]])
     assert np.allclose(res, [[4], [4], [4]])
     assert len(ib.mod_afferents) == 1
     assert ib.mod_afferents[0].sender == icomp.parameter_CIM.output_port
     assert icomp.parameter_CIM_ports[ib.parameter_ports['slope']][
         0].path_afferents[0].sender == cm.output_port
示例#5
0
 def test_nested_control_projection_count_control_mech(self):
     # Inner Composition
     ia = TransferMechanism(name='ia')
     icomp = Composition(name='icomp', pathways=[ia])
     # Outer Composition
     oa = TransferMechanism(name='oa')
     cm = ControlMechanism(name='cm',
                           control=[
                               ControlSignal(projections=[(NOISE, ia)]),
                               ControlSignal(projections=[(INTERCEPT, ia)]),
                               ControlSignal(projections=[(SLOPE, ia)])
                           ])
     ocomp = Composition(name='ocomp', pathways=[[oa, icomp], [cm]])
     assert len(cm.efferents) == 3
     assert all([
         proj.receiver.owner == icomp.parameter_CIM for proj in cm.efferents
     ])
     assert len(ia.mod_afferents) == 3
     assert all([
         proj.sender.owner == icomp.parameter_CIM
         for proj in ia.mod_afferents
     ])