This commit is contained in:
Lendaia Mirai
2026-01-13 03:27:55 +01:00
parent 75228324cc
commit fbd461e7b5
2 changed files with 272 additions and 272 deletions

View File

@@ -1,186 +1,186 @@
// using System; using System;
// namespace OE.ALGA.Optimalizalas namespace OE.ALGA.Optimalizalas
// { {
// public class VisszalepesesOptimalizacio<T> public class VisszalepesesOptimalizacio<T>
// { {
// public int n; public int n;
// public int[] M; public int[] M;
// public T[,] R; public T[,] R;
// public Func<int, T, bool> ft; public Func<int, T, bool> ft;
// public Func<int, T, T[], bool> fk; public Func<int, T, T[], bool> fk;
// public Func<T[], float> josag; public Func<T[], float> josag;
// public int Lepesszam { get; set;} = 0; public int Lepesszam { get; set;} = 0;
// public VisszalepesesOptimalizacio(int n, int[] M, T[,] R, Func<int, T, bool> ft, Func<int, T, T[], bool> fk, Func<T[], float> josag) public VisszalepesesOptimalizacio(int n, int[] M, T[,] R, Func<int, T, bool> ft, Func<int, T, T[], bool> fk, Func<T[], float> josag)
// { {
// this.n = n; this.n = n;
// this.M = M; this.M = M;
// this.R = R; this.R = R;
// this.ft = ft; this.ft = ft;
// this.fk = fk; this.fk = fk;
// this.josag = josag; this.josag = josag;
// } }
// public T[] OptimalisMegoldas() public T[] OptimalisMegoldas()
// { {
// int szint = 0; int szint = 0;
// T[] E = new T[n]; T[] E = new T[n];
// bool van = false; bool van = false;
// T[] O = new T[n]; T[] O = new T[n];
// Backtrack(szint, ref E, ref van, ref O); Backtrack(szint, ref E, ref van, ref O);
// if (van) if (van)
// { {
// return O; return O;
// } }
// else else
// { {
// throw new Exception("Nincs megoldas"); throw new Exception("Nincs megoldas");
// } }
// } }
// virtual public void Backtrack(int szint, ref T[] E, ref bool van, ref T[] O) virtual public void Backtrack(int szint, ref T[] E, ref bool van, ref T[] O)
// { {
// int i = 0; int i = 0;
// while(i < M[szint]) while(i < M[szint])
// { {
// Lepesszam++; Lepesszam++;
// i++; i++;
// if (ft(szint, R[szint, i])) if (ft(szint, R[szint, i]))
// { {
// if(fk(szint, R[szint, i], E)) if(fk(szint, R[szint, i], E))
// { {
// E[szint] = R[szint, i]; E[szint] = R[szint, i];
// if (szint == n) if (szint == n)
// { {
// if ((!van) || josag(E) > josag(O)) if ((!van) || josag(E) > josag(O))
// { {
// O = E; O = E;
// } }
// van = true; van = true;
// } }
// else else
// { {
// Backtrack(szint+1, ref E, ref van, ref O); Backtrack(szint+1, ref E, ref van, ref O);
// } }
// } }
// } }
// } }
// } }
// } }
// public class VisszalepesesHatizsakPakolas public class VisszalepesesHatizsakPakolas
// { {
// HatizsakProblema problema; HatizsakProblema problema;
// public int LepesSzam {get; set;} public int LepesSzam {get; set;}
// public VisszalepesesHatizsakPakolas(HatizsakProblema problema) public VisszalepesesHatizsakPakolas(HatizsakProblema problema)
// { {
// this.problema = problema; this.problema = problema;
// } }
// virtual public bool[] OptimalisMegoldas() virtual public bool[] OptimalisMegoldas()
// { {
// int[] M = new int[problema.N]; int[] M = new int[problema.N];
// bool[,] R = new bool[problema.N, 2]; bool[,] R = new bool[problema.N, 2];
// for (int i = 0; i < problema.N; i++) for (int i = 0; i < problema.N; i++)
// { {
// M[i] = 2; M[i] = 2;
// R[i, 0] = true; R[i, 0] = true;
// R[i, 1] = false; R[i, 1] = false;
// } }
// VisszalepesesOptimalizacio<bool> visszalepesesoptimalizacio = new VisszalepesesOptimalizacio<bool>(problema.N, M, R, Ft, Fk, Josag); VisszalepesesOptimalizacio<bool> visszalepesesoptimalizacio = new VisszalepesesOptimalizacio<bool>(problema.N, M, R, Ft, Fk, Josag);
// bool[] eredmeny = visszalepesesoptimalizacio.OptimalisMegoldas(); bool[] eredmeny = visszalepesesoptimalizacio.OptimalisMegoldas();
// LepesSzam = visszalepesesoptimalizacio.Lepesszam; LepesSzam = visszalepesesoptimalizacio.Lepesszam;
// return eredmeny; return eredmeny;
// } }
// public float OptimalisErtek() public float OptimalisErtek()
// { {
// return problema.OsszErtek(OptimalisMegoldas()); return problema.OsszErtek(OptimalisMegoldas());
// } }
// private float Josag(bool[] pakolas) private float Josag(bool[] pakolas)
// { {
// float ertek = 0; float ertek = 0;
// if (!problema.Ervenyes(pakolas)) if (!problema.Ervenyes(pakolas))
// { {
// ertek = -1; ertek = -1;
// } }
// else else
// { {
// ertek = problema.OsszErtek(pakolas); ertek = problema.OsszErtek(pakolas);
// } }
// return ertek; return ertek;
// } }
// private bool Ft(int egesz, bool logikai) private bool Ft(int egesz, bool logikai)
// { {
// return true; return true;
// } }
// private bool Fk(int egesz, bool logikai, bool[] tomb) private bool Fk(int egesz, bool logikai, bool[] tomb)
// { {
// int weight = 0; int weight = 0;
// for (int i = 0; i < problema.N; i++) for (int i = 0; i < problema.N; i++)
// { {
// if(tomb[i]) if(tomb[i])
// { {
// weight += problema.W[i]; weight += problema.W[i];
// } }
// } }
// return (weight <= problema.Wmax); return (weight <= problema.Wmax);
// } }
// } }
// public class SzetvalasztasEsKorlatozasOptimalizacio<T> : VisszalepesesOptimalizacio<T> public class SzetvalasztasEsKorlatozasOptimalizacio<T> : VisszalepesesOptimalizacio<T>
// { {
// public Func<int, T[], int> fb; public Func<int, T[], int> fb;
// public SzetvalasztasEsKorlatozasOptimalizacio(Func<int, T[], int> fb, int n, int[] M, T[,] R, Func<int, T, bool> ft, Func<int, T, T[], bool> fk, Func<T[], float> josag) : base(n, M, R, ft, fk, josag) public SzetvalasztasEsKorlatozasOptimalizacio(Func<int, T[], int> fb, int n, int[] M, T[,] R, Func<int, T, bool> ft, Func<int, T, T[], bool> fk, Func<T[], float> josag) : base(n, M, R, ft, fk, josag)
// { {
// this.fb = fb; this.fb = fb;
// } }
// public override void Backtrack(int szint, ref T[] E, ref bool van, ref T[] O) public override void Backtrack(int szint, ref T[] E, ref bool van, ref T[] O)
// { {
// int i = 0; int i = 0;
// while(i < M[szint]) while(i < M[szint])
// { {
// Lepesszam++; Lepesszam++;
// i++; i++;
// if (ft(szint, R[szint, i])) if (ft(szint, R[szint, i]))
// { {
// if(fk(szint, R[szint, i], E) && fb(szint, O) > 6) if(fk(szint, R[szint, i], E) && fb(szint, O) > 6)
// { {
// E[szint] = R[szint, i]; E[szint] = R[szint, i];
// if (szint == n) if (szint == n)
// { {
// if ((!van) || josag(E) > josag(O)) if ((!van) || josag(E) > josag(O))
// { {
// O = E; O = E;
// } }
// van = true; van = true;
// } }
// else else
// { {
// Backtrack(szint+1, ref E, ref van, ref O); Backtrack(szint+1, ref E, ref van, ref O);
// } }
// } }
// } }
// } }
// } }
// } }
// public class SzetvalasztasEsKorlatozasHatizsakPakolas : VisszalepesesHatizsakPakolas public class SzetvalasztasEsKorlatozasHatizsakPakolas : VisszalepesesHatizsakPakolas
// { {
// public SzetvalasztasEsKorlatozasHatizsakPakolas(HatizsakProblema problema) : base(problema) public SzetvalasztasEsKorlatozasHatizsakPakolas(HatizsakProblema problema) : base(problema)
// { {
// } }
// public override bool[] OptimalisMegoldas() public override bool[] OptimalisMegoldas()
// { {
// bool[] asd = new bool[2] {true, true}; bool[] asd = new bool[2] {true, true};
// return asd; return asd;
// } }
// } }
// } }

View File

@@ -1,103 +1,103 @@
// using NUnit.Framework; using NUnit.Framework;
// using OE.ALGA.Optimalizalas; using OE.ALGA.Optimalizalas;
// namespace OE.ALGA.Tesztek.Optimalizalas namespace OE.ALGA.Tesztek.Optimalizalas
// { {
// [TestFixture(Category = "Optimalizalas", TestName = "09 - Visszalépéses Keresés Tesztek")] [TestFixture(Category = "Optimalizalas", TestName = "09 - Visszalépéses Keresés Tesztek")]
// public class VisszalepesesKeresesTesztek public class VisszalepesesKeresesTesztek
// { {
// [TestCase] [TestCase]
// public void JegyzetbenLevoPeldaErtekTeszt() public void JegyzetbenLevoPeldaErtekTeszt()
// { {
// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p); HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p);
// VisszalepesesHatizsakPakolas opt = new VisszalepesesHatizsakPakolas(problema); VisszalepesesHatizsakPakolas opt = new VisszalepesesHatizsakPakolas(problema);
// Assert.Multiple(() => Assert.Multiple(() =>
// { {
// Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.jegyzet_optimalis_ertek)); Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.jegyzet_optimalis_ertek));
// Assert.That(opt.LepesSzam, Is.EqualTo(98)); Assert.That(opt.LepesSzam, Is.EqualTo(98));
// }); });
// } }
// [TestCase] [TestCase]
// public void JegyzetbenLevoPeldaMegoldasTeszt() public void JegyzetbenLevoPeldaMegoldasTeszt()
// { {
// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p); HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p);
// VisszalepesesHatizsakPakolas opt = new VisszalepesesHatizsakPakolas(problema); VisszalepesesHatizsakPakolas opt = new VisszalepesesHatizsakPakolas(problema);
// Assert.Multiple(() => Assert.Multiple(() =>
// { {
// Assert.That(opt.OptimalisMegoldas(), Is.EquivalentTo(PakolasTesztEsetek.jegyzet_optimalis_pakolas)); Assert.That(opt.OptimalisMegoldas(), Is.EquivalentTo(PakolasTesztEsetek.jegyzet_optimalis_pakolas));
// Assert.That(opt.LepesSzam, Is.EqualTo(98)); Assert.That(opt.LepesSzam, Is.EqualTo(98));
// }); });
// } }
// [TestCase] [TestCase]
// public void NagyPeldaMegoldasTeszt() public void NagyPeldaMegoldasTeszt()
// { {
// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.nagy_n, PakolasTesztEsetek.nagy_Wmax, PakolasTesztEsetek.nagy_w, PakolasTesztEsetek.nagy_p); HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.nagy_n, PakolasTesztEsetek.nagy_Wmax, PakolasTesztEsetek.nagy_w, PakolasTesztEsetek.nagy_p);
// VisszalepesesHatizsakPakolas opt = new VisszalepesesHatizsakPakolas(problema); VisszalepesesHatizsakPakolas opt = new VisszalepesesHatizsakPakolas(problema);
// Assert.Multiple(() => Assert.Multiple(() =>
// { {
// Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.nagy_optimalis_ertek)); Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.nagy_optimalis_ertek));
// Assert.That(opt.LepesSzam, Is.EqualTo(4832)); Assert.That(opt.LepesSzam, Is.EqualTo(4832));
// }); });
// } }
// [TestCase] [TestCase]
// public void LepesszamVizsgalat() public void LepesszamVizsgalat()
// { {
// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.nagy_n, PakolasTesztEsetek.nagy_Wmax, PakolasTesztEsetek.nagy_w, PakolasTesztEsetek.nagy_p); HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.nagy_n, PakolasTesztEsetek.nagy_Wmax, PakolasTesztEsetek.nagy_w, PakolasTesztEsetek.nagy_p);
// VisszalepesesHatizsakPakolas opt = new VisszalepesesHatizsakPakolas(problema); VisszalepesesHatizsakPakolas opt = new VisszalepesesHatizsakPakolas(problema);
// Assert.Multiple(() => Assert.Multiple(() =>
// { {
// Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.nagy_optimalis_ertek)); Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.nagy_optimalis_ertek));
// Assert.That(opt.LepesSzam, Is.EqualTo(4832)); Assert.That(opt.LepesSzam, Is.EqualTo(4832));
// }); });
// } }
// } }
// [TestFixture(Category = "Optimalizalas", TestName = "09 - Szétválasztás és Korlátozás Tesztek")] [TestFixture(Category = "Optimalizalas", TestName = "09 - Szétválasztás és Korlátozás Tesztek")]
// public class SzetvalasztasEsKorlatozasTesztek public class SzetvalasztasEsKorlatozasTesztek
// { {
// [TestCase] [TestCase]
// public void JegyzetbenLevoPeldaErtekTeszt() public void JegyzetbenLevoPeldaErtekTeszt()
// { {
// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p); HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p);
// SzetvalasztasEsKorlatozasHatizsakPakolas opt = new SzetvalasztasEsKorlatozasHatizsakPakolas(problema); SzetvalasztasEsKorlatozasHatizsakPakolas opt = new SzetvalasztasEsKorlatozasHatizsakPakolas(problema);
// Assert.Multiple(() => Assert.Multiple(() =>
// { {
// Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.jegyzet_optimalis_ertek)); Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.jegyzet_optimalis_ertek));
// Assert.That(opt.LepesSzam, Is.EqualTo(62)); Assert.That(opt.LepesSzam, Is.EqualTo(62));
// }); });
// } }
// [TestCase] [TestCase]
// public void JegyzetbenLevoPeldaMegoldasTeszt() public void JegyzetbenLevoPeldaMegoldasTeszt()
// { {
// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p); HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p);
// SzetvalasztasEsKorlatozasHatizsakPakolas opt = new SzetvalasztasEsKorlatozasHatizsakPakolas(problema); SzetvalasztasEsKorlatozasHatizsakPakolas opt = new SzetvalasztasEsKorlatozasHatizsakPakolas(problema);
// Assert.Multiple(() => Assert.Multiple(() =>
// { {
// Assert.That(opt.OptimalisMegoldas(), Is.EquivalentTo(PakolasTesztEsetek.jegyzet_optimalis_pakolas)); Assert.That(opt.OptimalisMegoldas(), Is.EquivalentTo(PakolasTesztEsetek.jegyzet_optimalis_pakolas));
// Assert.That(opt.LepesSzam, Is.EqualTo(62)); Assert.That(opt.LepesSzam, Is.EqualTo(62));
// }); });
// } }
// [TestCase] [TestCase]
// public void NagyPeldaMegoldasTeszt() public void NagyPeldaMegoldasTeszt()
// { {
// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.nagy_n, PakolasTesztEsetek.nagy_Wmax, PakolasTesztEsetek.nagy_w, PakolasTesztEsetek.nagy_p); HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.nagy_n, PakolasTesztEsetek.nagy_Wmax, PakolasTesztEsetek.nagy_w, PakolasTesztEsetek.nagy_p);
// SzetvalasztasEsKorlatozasHatizsakPakolas opt = new SzetvalasztasEsKorlatozasHatizsakPakolas(problema); SzetvalasztasEsKorlatozasHatizsakPakolas opt = new SzetvalasztasEsKorlatozasHatizsakPakolas(problema);
// Assert.Multiple(() => Assert.Multiple(() =>
// { {
// Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.nagy_optimalis_ertek)); Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.nagy_optimalis_ertek));
// Assert.That(opt.LepesSzam, Is.EqualTo(618)); Assert.That(opt.LepesSzam, Is.EqualTo(618));
// }); });
// } }
// [TestCase] [TestCase]
// public void LepesszamVizsgalat() public void LepesszamVizsgalat()
// { {
// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.nagy_n, PakolasTesztEsetek.nagy_Wmax, PakolasTesztEsetek.nagy_w, PakolasTesztEsetek.nagy_p); HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.nagy_n, PakolasTesztEsetek.nagy_Wmax, PakolasTesztEsetek.nagy_w, PakolasTesztEsetek.nagy_p);
// SzetvalasztasEsKorlatozasHatizsakPakolas opt = new SzetvalasztasEsKorlatozasHatizsakPakolas(problema); SzetvalasztasEsKorlatozasHatizsakPakolas opt = new SzetvalasztasEsKorlatozasHatizsakPakolas(problema);
// Assert.Multiple(() => Assert.Multiple(() =>
// { {
// Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.nagy_optimalis_ertek)); Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.nagy_optimalis_ertek));
// Assert.That(opt.LepesSzam, Is.EqualTo(618)); Assert.That(opt.LepesSzam, Is.EqualTo(618));
// }); });
// } }
// } }
// } }