//TODO: Maybe add EnvironmentState[][] states for aggregation of states in unity side buffer, when using skips?
        /// <summary>
        /// </summary>
        /// <param name="states"></param>
        void Reply(EnvironmentSnapshot[] states)
        {
            lock (this._send_lock) {
                var configuration_message = new SimulatorConfigurationMessage(this.Configuration);
                var describe = false;
                if (this.CurrentReactions != null)
                {
                    foreach (var reaction in this.CurrentReactions)
                    {
                        if (reaction.Parameters.Describe)
                        {
                            describe = true;
                        }
                    }
                }

                this._Message_Client.SendStates(states,
                                                simulator_configuration_message: configuration_message,
                                                do_serialise_unobservables:
                                                describe || this.Configuration.AlwaysSerialiseUnobservables,
                                                serialise_individual_observables:
                                                describe || this.Configuration.AlwaysSerialiseIndividualObservables,
                                                do_serialise_observables: describe ||
                                                this._configuration
                                                .AlwaysSerialiseAggregatedFloatArray);
        #if NEODROID_DEBUG
                if (this.Debugging)
                {
                    Debug.Log("Replying");
                }
        #endif
            }
        }
Example #2
0
        /// <summary>
        /// </summary>
        /// <param name="states"></param>
        /// <param name="simulator_configuration"></param>
        /// <param name="serialise_individual_observables"></param>
        /// <param name="do_serialise_unobservables"></param>
        /// <param name="do_serialise_observables"></param>
        /// <param name="api_version"></param>
        /// <returns></returns>
        public static byte[] Serialise(EnvironmentSnapshot[] states,
                                       SimulatorConfigurationMessage simulator_configuration = null,
                                       bool do_serialise_unobservables       = false,
                                       bool serialise_individual_observables = false,
                                       bool do_serialise_observables         = false,
                                       string api_version = "N/A")
        {
            var b             = new FlatBufferBuilder(1);
            var state_offsets = new Offset <FState> [states.Length];
            var i             = 0;

            foreach (var state in states)
            {
                state_offsets[i++] = SerialiseState(b,
                                                    state,
                                                    do_serialise_unobservables,
                                                    do_serialise_observables,
                                                    serialise_individual_observables:
                                                    serialise_individual_observables);
            }

            var states_vector_offset = FStates.CreateStatesVector(b, state_offsets);

            var api_version_offset = b.CreateString(api_version);

            FStates.StartFStates(b);
            FStates.AddStates(b, states_vector_offset);
            FStates.AddApiVersion(b, api_version_offset);
            FStates.AddSimulatorConfiguration(b, Serialise(b, simulator_configuration));
            var states_offset = FStates.EndFStates(b);

            FStates.FinishFStatesBuffer(b, states_offset);

            return(b.SizedByteArray());
        }
Example #3
0
        /// <summary>
        /// </summary>
        /// <param name="reactions"></param>
        /// <returns></returns>
        public static Tuple <Reaction[], bool, string, SimulatorConfigurationMessage> deserialise_reactions(
            FReactions?reactions)
        {
            _out_reactions.Clear();

            var close                   = false;
            var api_version             = "";
            var simulator_configuration = new SimulatorConfigurationMessage();

            if (reactions.HasValue)
            {
                var rs = reactions.Value;
                for (var i = 0; i < rs.ReactionsLength; i++)
                {
                    _out_reactions.Add(deserialise_reaction(rs.Reactions(i)));
                }

                close       = rs.Close;
                api_version = rs.ApiVersion;
                if (rs.SimulatorConfiguration.HasValue)
                {
                    simulator_configuration.FbsParse(rs.SimulatorConfiguration.Value);
                }
            }

            if (_out_reactions.Count == 0)
            {
                Debug.LogWarning("Empty reactions received");
            }

            return(new Tuple <Reaction[], bool, String, SimulatorConfigurationMessage>(_out_reactions.ToArray(),
                                                                                       close,
                                                                                       api_version,
                                                                                       simulator_configuration));
        }
Example #4
0
 serialise_simulator_configuration(FlatBufferBuilder b, SimulatorConfigurationMessage configuration)
 {
     return(FSimulatorConfiguration.CreateFSimulatorConfiguration(
                b,
                configuration.Width,
                configuration.Height,
                configuration.FullScreen,
                configuration.QualityLevel,
                configuration.TimeScale,
                configuration.TargetFrameRate,
                configuration.SimulationType,
                configuration.FrameSkips,
                configuration.ResetIterations,
                configuration.NumOfEnvironments,
                configuration.DoSerialiseIndividualObservables,
                configuration.DoSerialiseUnobservables));
 }
Example #5
0
 //TODO: EnvironmentState[][] states for aggregation of states
 /// <summary>
 ///
 /// </summary>
 /// <param name="states"></param>
 void Reply(EnvironmentState[] states)
 {
     lock (this._send_lock) {
         var configuration_message = new SimulatorConfigurationMessage(this.Configuration);
         this._Message_Server.SendStates(
             states,
             simulator_configuration_message: configuration_message,
             do_serialise_unobservables: this.Configuration.AlwaysSerialiseUnobservables,
             serialise_indidual_observables: this.Configuration.AlwaysSerialiseIndividualObservables);
 #if NEODROID_DEBUG
         if (this.Debugging)
         {
             Debug.Log("Replying");
         }
 #endif
     }
 }
Example #6
0
 Serialise(FlatBufferBuilder b, SimulatorConfigurationMessage configuration)
 {
     return(FSimulatorConfiguration.CreateFSimulatorConfiguration(b,
                                                                  configuration.Width,
                                                                  configuration.Height,
                                                                  configuration.FullScreen,
                                                                  configuration.QualityLevel,
                                                                  configuration.TimeScale,
                                                                  configuration.TargetFrameRate,
                                                                  (FSimulationType)configuration
                                                                  .SimulationType,
                                                                  configuration.FrameSkips,
                                                                  0, //TODO: Remove
                                                                  configuration.NumOfEnvironments,
                                                                  configuration.DoSerialiseIndividualSensors,
                                                                  configuration.DoSerialiseUnobservables
                                                                  //TODO: ,configuration.DoSerialiseAggregatedFloatArray
                                                                  ));
 }
Example #7
0
        ///  <summary>
        ///
        ///  </summary>
        ///  <param name="environment_states"></param>
        /// <param name="do_serialise_unobservables"></param>
        /// <param name="serialise_indidual_observables"></param>
        /// <param name="simulator_configuration_message"></param>
        /// <param name="api_vesion"></param>
        public void SendStates(
            EnvironmentState[] environment_states,
            bool do_serialise_unobservables     = false,
            bool serialise_indidual_observables = false,
            SimulatorConfigurationMessage simulator_configuration_message = null,
            string api_vesion = _api_version)
        {
            lock (this._thread_lock) {
        #if NEODROID_DEBUG
                if (this.Debugging)
                {
                    var environment_state = environment_states.ToArray();
                    if (environment_state.Length > 0)
                    {
                        if (environment_state[0] != null)
                        {
                            var frame_number           = environment_state[0].FrameNumber;
                            var time                   = environment_state[0].Time;
                            var frame_number_duplicate = this._last_send_frame_number == frame_number;
                            if (frame_number_duplicate && frame_number > 0)
                            {
                                Debug.LogWarning($"Sending duplicate frame! Frame number: {frame_number}");
                            }

                            if (frame_number <= this._last_send_frame_number)
                            {
                                Debug.LogWarning(
                                    $"The current frame number {frame_number} is less or equal the last {this._last_send_frame_number}, SINCE AWAKE ({Time.frameCount})");
                            }

                            if (time <= this._last_send_time)
                            {
                                Debug.LogWarning($"The current time {time} is less or equal the last {this._last_send_time}");
                            }

                            if (environment_state[0].Description != null)
                            {
                                Debug.Log($"State has description: {environment_state[0].Description}");
                            }

                            this._last_send_frame_number = frame_number;
                            this._last_send_time         = time;
                        }
                    }
                    else
                    {
                        Debug.LogWarning($"No environment states where send.");
                    }
                }
        #endif

                this._byte_buffer = FbsStateUtilities.serialise_states(
                    environment_states,
                    do_serialise_unobservables: do_serialise_unobservables,
                    serialise_indidual_observables: serialise_indidual_observables,
                    simulator_configuration: simulator_configuration_message,
                    api_version: api_vesion);
                this._socket.SendFrame(this._byte_buffer);
                this._waiting_for_main_loop_to_send = false;
            }
        }
Example #8
0
        /// <summary>
        /// </summary>
        /// <param name="environment_states"></param>
        /// <param name="do_serialise_unobservables"></param>
        /// <param name="serialise_individual_observables"></param>
        /// <param name="do_serialise_observables"></param>
        /// <param name="simulator_configuration_message"></param>
        /// <param name="api_version"></param>
        public void SendStates(EnvironmentSnapshot[] environment_states,
                               bool do_serialise_unobservables       = false,
                               bool serialise_individual_observables = false,
                               bool do_serialise_observables         = false,
                               SimulatorConfigurationMessage simulator_configuration_message = null,
                               string api_version = NeodroidRuntimeInfo._Version)
        {
            lock (this._thread_lock) {
        #if NEODROID_DEBUG
                if (this.Debugging)
                {
                    var environment_state = environment_states.ToArray();
                    if (environment_state.Length > 0)
                    {
                        if (environment_state[0] != null)
                        {
                            var frame_number  = environment_state[0].FrameNumber;
                            var time          = environment_state[0].Time;
                            var episode_count = this._last_received_reactions[0].Parameters.EpisodeCount;
                            var stepped       = this._last_received_reactions[0].Parameters.StepResetObserveEnu == StepResetObserve
                                                .Step_;

                            if (frame_number <= this._last_send_frame_number)
                            {
                                Debug.LogWarning($"The current frame number {frame_number} is less or equal the last {this._last_send_frame_number}, SINCE AWAKE ({Time.frameCount})");
                                if (this._last_send_frame_number == frame_number && frame_number > 0 && episode_count)
                                {
                                    Debug.LogWarning($"Sending duplicate frame! Frame number: {frame_number}");
                                }
                            }

                            if (time <= this._last_send_time && stepped)
                            {
                                Debug.LogWarning($"The current time {time} is less or equal the last {this._last_send_time}");
                            }

                            if (environment_state[0].Description != null)
                            {
                                Debug.Log($"State has description: {environment_state[0].Description}");
                            }

                            this._last_send_frame_number = frame_number;
                            this._last_send_time         = time;
                        }
                    }
                    else
                    {
                        Debug.LogWarning("No environment states where send.");
                    }
                }
        #endif

                this._byte_buffer = FbsStateUtilities.Serialise(environment_states,
                                                                do_serialise_unobservables:
                                                                do_serialise_unobservables,
                                                                serialise_individual_observables:
                                                                serialise_individual_observables,
                                                                simulator_configuration:
                                                                simulator_configuration_message,
                                                                do_serialise_observables: do_serialise_observables,
                                                                api_version: api_version);
                this._socket.SendFrame(this._byte_buffer);
                this._waiting_for_main_loop_to_send = false;
            }
        }