public void AingangZuZaitRotatioonMili( Int64 Zait, int RotatioonMili) { if (EndeZait.HasValue) { return; } if (0 < ListeZuZaitRotatioonMili.Count) { if (Zait <= ListeZuZaitRotatioonMili.LastOrDefault().Zait) { return; } } ListeZuZaitRotatioonMili.Enqueue(new SictWertMitZait <int>(Zait, RotatioonMili)); var ListeZuZaitRotatioonMiliBerüksictigt = ListeZuZaitRotatioonMili.Skip(ListeZuZaitRotatioonMili.Count - 9).ToArray(); if (6 < ListeZuZaitRotatioonMiliBerüksictigt.Length) { var RampAgregatioon = new ModuleRampAgregatioon(ListeZuZaitRotatioonMiliBerüksictigt, 200); RampAgregatioon.Berecne(ListeRampAgregatioon.ToArrayNullable()); ScritLezteRampAgregatioon = RampAgregatioon; ListeRampAgregatioon.Enqueue(RampAgregatioon); ListeRampAgregatioon.ListeKürzeBegin(8); var NuldurcgangZaitMili = RampAgregatioon.NuldurcgangZaitMili; var GescwindigkaitMikro = RampAgregatioon.GescwindigkaitMikro; if (NuldurcgangZaitMili.HasValue && GescwindigkaitMikro.HasValue) { var ZyyklusDauerMili = (Int64)(1e+9) / GescwindigkaitMikro.Value; var NuldurcgangNääxteZait = NuldurcgangZaitMili.Value; var NuldurcgangNääxteZaitDistanz = NuldurcgangNääxteZait - Zait; RotatioonProjektioonNuldurcgangNääxte = NuldurcgangNääxteZait.SictUmgebrocen(Zait, Zait + ZyyklusDauerMili); /* * 2014.09.27 * * if (Math.Abs(NuldurcgangNääxteZaitDistanz) < 4444) * */ if (NuldurcgangNääxteZaitDistanz <= 0 && Math.Abs(NuldurcgangNääxteZaitDistanz) < 8888) { var NuldurcgangVerdrängtDurcVorherige = false; var RotatioonNuldurcgangLezteZait = this.RotatioonNuldurcgangLezteZait ?? this.BeginZait; if (RotatioonNuldurcgangLezteZait.HasValue) { var RotatioonNuldurcgangLezteZaitDistanz = RotatioonNuldurcgangLezteZait.Value - NuldurcgangNääxteZait; if (Math.Abs(RotatioonNuldurcgangLezteZaitDistanz) < Math.Abs(ZyyklusDauerMili) / 2) { NuldurcgangVerdrängtDurcVorherige = true; } } if (!NuldurcgangVerdrängtDurcVorherige) { InternRotatioonListeNuldurcgangZait.Enqueue(NuldurcgangNääxteZait); InternRotatioonListeNuldurcgangZait.ListeKürzeBegin(8); InternRotatioonListeNuldurcgangZait.ListeKürzeBegin((Element) => 1000 * 60 * 15 < Zait - Element); } } } } ListeZuZaitRotatioonMili.ListeKürzeBegin(10); }
public void Berecne( ModuleRampAgregatioon[] MengeVorherigeZuBerüksictige) { Int64[] ListeGescwindigkaitMikro = null; Int64? GescwindigkaitMikro = null; Int64? NuldurcgangZaitMili = null; SictWertMitZait <int>[] AingangListeZuZaitRampRotatioonMiliFiltertNaacVorherige = null; SictWertMitZait <int>[] FürGescwindigkaitMengeZuScnapscusZaitpunktMengeAuslasungAnzaal = null; SictWertMitZait <int>[] ZuZaitpunktMengeAuslasungAnzaalOrdnet = null; try { var AingangListeZuZaitMiliRampRotatioonMili = this.AingangListeZuZaitMiliRampRotatioonMili; var GescwindigkaitScrankeMili = this.GescwindigkaitScrankeMili; if (null == AingangListeZuZaitMiliRampRotatioonMili) { return; } if (GescwindigkaitScrankeMili < 1) { return; } var AingangListeScnapscusZait = AingangListeZuZaitMiliRampRotatioonMili .Select((ZuZaitMiliRampRotatioonMili) => ZuZaitMiliRampRotatioonMili.Zait) .ToArrayNullable(); AingangListeZuZaitRampRotatioonMiliFiltertNaacVorherige = FilterMitBerüksictigungVorherige( AingangListeZuZaitMiliRampRotatioonMili, MengeVorherigeZuBerüksictige, 5, 7, out ZuZaitpunktMengeAuslasungAnzaalOrdnet); var ListeDiferenzZwisceScnapscusVorFilter = ModuleRampAgregatioon.ListeDiferenzZwisceScnapscusBerecne(AingangListeZuZaitRampRotatioonMiliFiltertNaacVorherige, 1) .Concat(ModuleRampAgregatioon.ListeDiferenzZwisceScnapscusBerecne(AingangListeZuZaitRampRotatioonMiliFiltertNaacVorherige, 2)) //.Concat(ModuleRampAgregatioon.ListeGescwindigkaitMikroBerecne(AingangListeZuZaitRampRotatioonMili, 3)) .ToArray(); var ListeDiferenzZwisceScnapscus = ListeDiferenzZwisceScnapscusVorFilter .Where((Diferenz) => - GescwindigkaitScrankeMili * 1000 <= Diferenz.GescwindigkaitMikro && Diferenz.GescwindigkaitMikro <= GescwindigkaitScrankeMili * 1000) .ToArray(); var VorAuslasungMengeZuScnapscusZaitMengeVerwendungAnzaal = MengeZuScnapscusZaitVerwendungAnzaal(AingangListeScnapscusZait, ListeDiferenzZwisceScnapscus); ListeGescwindigkaitMikro = ListeDiferenzZwisceScnapscus .Select((Diferenz) => Diferenz.GescwindigkaitMikro) .ToArrayNullable(); if (!(0 < ListeGescwindigkaitMikro.CountNullable())) { return; } var MengeKombiListeGescwindigkaitMikro = Bib3.Kombinatoorik.MengeKombinatioonTailmengeOoneOrdnung( ListeDiferenzZwisceScnapscus, Math.Max(5, Math.Max(ListeGescwindigkaitMikro.Length - 2, (ListeGescwindigkaitMikro.Length * 2) / 3 + 1))); if (!(1 < MengeKombiListeGescwindigkaitMikro.CountNullable())) { return; } var MengeKombiErgeebnisGescwindigkaitUndDistanzAgr = MengeKombiListeGescwindigkaitMikro .Select((Kombi, KombiIndex) => { Int64 DistanzAgregatioon; var Gescwindigkait = Fiting.Fit1DMitKomponenteExponent( Kombi.Select((KombiElement) => KombiElement.GescwindigkaitMikro).ToArrayNullable(), 100, out DistanzAgregatioon); if (!Gescwindigkait.HasValue) { DistanzAgregatioon = Int64.MaxValue; } return(new KeyValuePair <DiferenzZwisceScnapscus[], KeyValuePair <Int64, Int64> >( Kombi, new KeyValuePair <Int64, Int64>(Gescwindigkait ?? Int64.MinValue, DistanzAgregatioon))); }) .ToArray(); var MengeKombiErgeebnisGescwindigkaitUndDistanzAgrBeste = MengeKombiErgeebnisGescwindigkaitUndDistanzAgr .OrderBy((Kandidaat) => Kandidaat.Value.Value) .FirstOrDefault(); /* * 2014.09.25 * * var NaacAuslasungMengeZuScnapscusZaitMengeVerwendungAnzaal = * MengeZuScnapscusZaitVerwendungAnzaal(AingangListeScnapscusZait, MengeKombiErgeebnisGescwindigkaitUndDistanzAgrBeste.Key); * * FürGescwindigkaitMengeZuScnapscusZaitpunktMengeAuslasungAnzaal = * AingangListeScnapscusZait * .Select((KandidaatScnapscusZait) => * new SictWertMitZait<int>( * KandidaatScnapscusZait, * VorAuslasungMengeZuScnapscusZaitMengeVerwendungAnzaal.FirstOrDefault((t) => t.Zait == KandidaatScnapscusZait).Wert - * NaacAuslasungMengeZuScnapscusZaitMengeVerwendungAnzaal.FirstOrDefault((t) => t.Zait == KandidaatScnapscusZait).Wert)) * .Where((Kandidaat) => 0 < Kandidaat.Wert) * .ToArray(); * */ GescwindigkaitMikro = MengeKombiErgeebnisGescwindigkaitUndDistanzAgrBeste.Value.Key; if (!GescwindigkaitMikro.HasValue) { return; } /* * 2014.09.27 * * var FilterGescwindigkaitMikroScrankeMin = (GescwindigkaitMikro * 7) / 10; * var FilterGescwindigkaitMikroScrankeMax = (GescwindigkaitMikro * 13) / 10; * */ var FilterGescwindigkaitMikroScrankeMin = GescwindigkaitMikro / 2; var FilterGescwindigkaitMikroScrankeMax = GescwindigkaitMikro * 2; var ListeDiferenzZwisceScnapscusFilterNaacGescwindigkaitErgeebnis = ListeDiferenzZwisceScnapscus .Where((Kandidaat) => FilterGescwindigkaitMikroScrankeMin <= Kandidaat.GescwindigkaitMikro && Kandidaat.GescwindigkaitMikro <= FilterGescwindigkaitMikroScrankeMax) .ToArray(); var NaacAuslasungMengeZuScnapscusZaitMengeVerwendungAnzaal = MengeZuScnapscusZaitVerwendungAnzaal(AingangListeScnapscusZait, ListeDiferenzZwisceScnapscusFilterNaacGescwindigkaitErgeebnis); FürGescwindigkaitMengeZuScnapscusZaitpunktMengeAuslasungAnzaal = AingangListeScnapscusZait .Select((KandidaatScnapscusZait) => new SictWertMitZait <int>( KandidaatScnapscusZait, VorAuslasungMengeZuScnapscusZaitMengeVerwendungAnzaal.FirstOrDefault((t) => t.Zait == KandidaatScnapscusZait).Wert - NaacAuslasungMengeZuScnapscusZaitMengeVerwendungAnzaal.FirstOrDefault((t) => t.Zait == KandidaatScnapscusZait).Wert)) .Where((Kandidaat) => 0 < Kandidaat.Wert) .ToArray(); if (0 == GescwindigkaitMikro) { return; } { var ZyyklusDauerMili = (Int64)(1e+9) / GescwindigkaitMikro.Value; var UmbrucRegioonBegin = (AingangListeZuZaitMiliRampRotatioonMili.Last().Zait - ZyyklusDauerMili / 2); var UmbrucRegioonEnde = UmbrucRegioonBegin + ZyyklusDauerMili; var MengeKandidaatNuldurcgangZaitMili = AingangListeZuZaitMiliRampRotatioonMili .Select((ZuZaitMiliRampRotatioonMili) => ((ZuZaitMiliRampRotatioonMili.Zait - (ZuZaitMiliRampRotatioonMili.Wert * 1000000 / GescwindigkaitMikro.Value)) .SictUmgebrocen(UmbrucRegioonBegin, UmbrucRegioonEnde))) .ToArray(); NuldurcgangZaitMili = Fiting.Fit1DMitKomponenteExponent(MengeKandidaatNuldurcgangZaitMili, 100); } } finally { this.ListeGescwindigkaitMikro = ListeGescwindigkaitMikro; this.ZuZaitpunktMengeAuslasungAnzaalOrdnet = ZuZaitpunktMengeAuslasungAnzaalOrdnet; this.AingangListeZuZaitRampRotatioonMiliFiltertNaacVorherige = AingangListeZuZaitRampRotatioonMiliFiltertNaacVorherige; this.GescwindigkaitMikro = GescwindigkaitMikro; this.NuldurcgangZaitMili = NuldurcgangZaitMili; this.FürGescwindigkaitMengeZuScnapscusZaitpunktMengeAuslasungAnzaal = FürGescwindigkaitMengeZuScnapscusZaitpunktMengeAuslasungAnzaal; } }