Objects and Smell Sources
Any object that appears in the Odor World window is an entity with properties that can be set in the entity dialog (which appears when you double click on the object, or right click on it and select Edit Entity). That dialog gives a sense of what is possible with Odor World objects. Objects can be dragged around. They have velocity properties which can also be set so that they can be made to translate (move along straight line paths) at every iteration. Since the world wraps around by default, these objects will continually move through the world.
Agents are a special kind of object that can be coupled to other Simbrain components, in particular neural networks, which can control their movements in subtle ways. They can also serve as smell sources.
To get started understanding how agent sensors and effectors work see the couplings overview page.
Smell Sources and Stimulus Vectors
All non-agent entities in Simbrain are smell sources. Agents are not smell sources by default, but by right clicking on them and selecting Set Smell Sources they can be designated as smell sources.
Smell sources "emit" a smell that can be sensed by smell sensors on other agents. Smell sources are basically vectors of values or "stimulus vectors" that are used to set the values on an agent's sensors. The impact of a stimulus vector on a smell sensor is scaled by a decay function associated with that particular object. Thus an object's stimulus vector is like the profile of activation it will produce on a sensor when the sensor is right on top of the object. The stimulus vector, its decay function, and other features (like random noise) are all set in the Entity Dialog.
By associating different objects with different stimulus vectors, you can make them have a differential impact on the sensory neurons of a network. For example, you can make it the case that every swiss cheese will provide an input value of 10 to the first component of smell sensor, while fish will send inputs of 10 to second component of a smell sensor
A smell sensor is associated with a "sensor vector", that is the result of scaling all the stimulus vectors in its vicinity based their distance from that sensor (using decay functions), and then adding these scaled stimulus vectors together. The process is illustrated below, where two objects with two stimulus vectors are sensed by the agent's left smell sensor.
In the example shown, we can suppose that the first stimulus vector decays from (1,.1,.8) to (.1,.01,.08) when it reaches the sensor, and the second decays from (1,0,.9) to (.1,0,.09). These decayed stimulus vectors are added so that the value of the sensor vector will be (.2,.01,.17). Note that the left sensor will receive larger values because it is closer to the two cheese objects.
Note that the sensor vector depends crucially on the location of the sensory apparatus on a creature. I hear things to my left more in my left ear than my right, because my left ear is closer to the source of the sound. The location of a receptor can be set in Simbrain in the sensor tab of the dialog that opens when you double click on an agent. See the discussion of smell sensor to configure sensor angle and length.
Smell sensors are producers in couplings. The current value of a sensor vector (either the whole vector, or one component) are sent to neurons and neuron groups (or other components) in Simbrain. Smell sensors can produce scalar and vector values. Vector values are just the sensor vector that occurs after summing and scaling as described above. Scalar values are particular components of these sensory vectors. Thus "Smell-Left-1" is the name of a scalar producer that will send the value of first component of the left sensor of an agent, and "Smell-Left-2" is the name of a scalar producer that will send the value of third component of that sensor.
Note that there are only 5 scalar producers for each smell sensor.
Background on Smell
Smell sources model the process in nature whereby chemicals are emitted from objects, which disperse from the center of the object and for the most part diminish with distance, and then are detected by the olfactory system of an animal. Different objects emit different chemicals. Thus, objects act as a broadcasting center for a unique stimulus patterns, much like how a fine Brie cheese disperses its odor around itself.
Objects in the world emit chemicals that bind to receptors inside a wet bank of tissue in the nose called the olfactory epithelium. Different objects produce chemicals that have a characteristic impact on the nose. If a person's olfactory epithelium has 100-million sensory neurons, then olfactory inputs for that person consist of 100-million dimensional vectors, lists of 100-million numbers, corresponding to the activity of each receptor in the nose, in response to a given stimulus.
If we encounter more than one object, we smell them all. Thus multiple stimulus vectors are added together. Depending on where an object is relative to a creature's sensors, the impact will be different. As we come closer to those objects, more of those chemicals are released and an intensified version of the same pattern will occur. Conversely, as we move away, a weakened version of the pattern occurs. Thus the total pattern of inputs to a creature's olfactory receptors is a function of the objects in its environment together with their locations relative to the creature's receptors.
Although Odor Worlds are built around olfaction, nothing prevents us from interpreting these functions as providing a general way of producing input vectors. After all, something similar occurs with other sensory modalities. Different objects will produce characteristic patterns of activity--input vectors--on the eyes, ears, and skin. Thus OdorWorld can be seen as a general framework for modeling the differential impact of objects on an agent's sensory apparatus.