public static void Iterate(HeatData heatData) { using (var l = new Logger("Iterate")) { var calculatedCarboneEvent = new CalculatedCarboneEvent(); var currentStateData = new MFCMData { CarbonMonoxideVolumePercent = heatData.CarbonMonoxideVolumePercent, CarbonOxideVolumePercent = heatData.CarbonOxideVolumePercent, HeightLanceCentimeters = heatData.HeightLanceCentimeters, OxygenVolumeRate = heatData.OxygenVolumeRate }; //RemainCarbonPercent = Decarbonater.ComplexNMCProcess(heatData.MatrixStateData, currentStateData); RemainCarbonPercent = Decarbonater.ComplexNMCProcess(currentStateData); if (MomentFixDataForMFactorModel(heatData.OxygenVolumeCurrent, heatData.OxygenVolumeTotal, heatData.CarbonMonoxideVolumePercent, heatData.CarbonOxideVolumePercent)) // фиксируем для обучения { if (m_noFixData) { CurrentHeatResult.OxygenVolumeRate = heatData.OxygenVolumeRate; CurrentHeatResult.SteelCarbonCalculationPercent = RemainCarbonPercent; CurrentHeatResult.CarbonMonoxideVolumePercent = heatData.CarbonMonoxideVolumePercent; CurrentHeatResult.CarbonOxideVolumePercent = heatData.CarbonOxideVolumePercent; CurrentHeatResult.HeightLanceCentimeters = heatData.HeightLanceCentimeters; EnqueueWaitC(CurrentHeatResult); // ставим в очередь ожидания углерода //Program.PushGate.PushEvent(new FixDataMfactorModelEvent()); FireFixEvent(RemainCarbonPercent); m_noFixData = false; } } ModelIsStarted = ModelVerifiForStart(heatData.OxygenVolumeCurrent, heatData.CarbonMonoxideVolumePercent, heatData.CarbonOxideVolumePercent); if (ModelIsStarted) FireStartEvent(); calculatedCarboneEvent.model = "Complex neural Model"; calculatedCarboneEvent.CarbonePercent = RemainCarbonPercent; calculatedCarboneEvent.CarboneMass = RemainCarbonMass; var fex = new ConnectionProvider.FlexHelper("NeuralProcessorC.Calc"); fex.AddArg("TypeNeural", "non linear"); fex.AddArg("C", RemainCarbonPercent); fex.Fire(Program.PushGate); FireResultCarbonEvent(); //l.msg("fired carbon:\n{0}",fex.evt.ToString()); //Program.PushGate.PushEvent(calculatedCarboneEvent); //Program.PushGate.PushEvent(new CalculatedCarboneEvent()); } }
public HeatData GetHeatData(HeatData hd, int intervalSec) { if (hd == null) throw new ArgumentNullException("hd"); hd.CarbonMonoxideVolumePercent = CarbonMonoxideVolumePercent.Average(intervalSec); hd.CarbonMonoxideVolumePercentPrevious = CarbonMonoxideVolumePercentPrevious.Average(intervalSec); hd.CarbonOxideVolumePercent = CarbonOxideVolumePercent.Average(intervalSec); hd.CarbonOxideVolumePercentPrevious = CarbonOxideVolumePercentPrevious.Average(intervalSec); hd.OffgasVolumeRate = OffgasVolumeRate.Average(intervalSec); hd.HeightLanceCentimeters = (int) Math.Round(HeightLanceCentimeters.Average(intervalSec), 0); hd.OxygenVolumeRate = OxygenVolumeRate.Average(intervalSec); hd.OxygenVolumeCurrent = OxygenVolumeCurrent.Average(intervalSec); return hd; }
public static void Init() { m_sw = new Stopwatch(); CurrentHeatResult = new MFCMDataFull(); DataCurrentHeat = new HeatData(); DataCurrentHeat.MatrixStateData = Program.MFCMDataGenerate(Program.MatrixStateDataFull); //!! Decarbonater.ComplexNMCTrain(DataCurrentHeat.MatrixStateData); //!! DataSmoothCurrent = new HeatDataSmoother(100); m_smoothSecondLancePosition = new RollingAverage(); TotalCarbonMass = 0.0; RemainCarbonMass = 0.0; RemainCarbonPercent = 0.0; m_maxDownLancePosition = 10000; m_lanceSpeed = 0.0; TotalCarbonMassCalculated = false; GasCarbonMassFinished = false; m_noFixData = true; ModelIsStarted = false; }