mostmegisjoabilenytuzet

This commit is contained in:
Lendaia Mirai
2025-11-06 16:38:19 +01:00
parent 0484b1fd83
commit 986f22194b
2 changed files with 175 additions and 178 deletions

View File

@@ -10,8 +10,8 @@ namespace OE.ALGA.Optimalizalas
public int N { get; } public int N { get; }
public int Wmax { get; } public int Wmax { get; }
public int[] W { get; } public int[] W { get; }
public double[] P { get; } public float[] P { get; }
public HatizsakProblema(int n, int wmax, int[] w, double[] p) public HatizsakProblema(int n, int wmax, int[] w, float[] p)
{ {
N = n; N = n;
Wmax = wmax; Wmax = wmax;
@@ -24,21 +24,18 @@ namespace OE.ALGA.Optimalizalas
public int OsszSuly(bool[] pakolas) public int OsszSuly(bool[] pakolas)
{ {
int osszsuly = 0; int osszsuly = 0;
if (pakolas.Length == N) for (int i = 0; i < N; i++)
{ {
for (int i = 0; i < N; i++) if (pakolas[i])
{ {
if (pakolas[i]) osszsuly += W[i];
{
osszsuly += W[i];
}
} }
} }
return osszsuly; return osszsuly;
} }
public double OsszErtek(bool[] pakolas) public float OsszErtek(bool[] pakolas)
{ {
double osszertek = 0; float osszertek = 0;
if (pakolas.Length == N) if (pakolas.Length == N)
{ {
for (int i = 0; i < N; i++) for (int i = 0; i < N; i++)
@@ -60,13 +57,13 @@ namespace OE.ALGA.Optimalizalas
{ {
int m; int m;
Func<int, T> generator; Func<int, T> generator;
Func<T, double> josag; Func<T, float> josag;
int lepesszam; int lepesszam;
public int LepesSzam public int LepesSzam
{ {
get { return lepesszam; } get { return lepesszam; }
} }
public NyersEro(int m, Func<int, T> generator, Func<T, double> josag) public NyersEro(int m, Func<int, T> generator, Func<T, float> josag)
{ {
this.m = m; this.m = m;
this.generator = generator; this.generator = generator;
@@ -75,10 +72,10 @@ namespace OE.ALGA.Optimalizalas
public T OptimalisMegoldas() public T OptimalisMegoldas()
{ {
T legjobb = generator(0); T legjobb = generator(0);
for (int i = 0; i < m; i++) for (int i = 1; i < m; i++)
{ {
T tmp = generator(i); T tmp = generator(i);
if (josag(tmp) > josag(legjobb)) if (josag(tmp) >= josag(legjobb))
{ {
legjobb = tmp; legjobb = tmp;
} }
@@ -103,10 +100,10 @@ namespace OE.ALGA.Optimalizalas
{ {
int szam = i; int szam = i;
bool[] pakolas = new bool[problema.N]; bool[] pakolas = new bool[problema.N];
for (int j = problema.N; j >= 0; j--) for (int j = problema.N - 1; j >= 0; j--)
{ {
bool ertek = (szam % 2 != 0); bool ertek = (szam % 2 != 0);
pakolas[i] = ertek; pakolas[j] = ertek;
if (ertek && szam > 0) if (ertek && szam > 0)
{ {
szam--; szam--;
@@ -115,10 +112,10 @@ namespace OE.ALGA.Optimalizalas
} }
return pakolas; return pakolas;
} }
public double Josag(bool[] pakolas) public float Josag(bool[] pakolas)
{ {
double ertek = 0; float ertek = 0;
if (problema.Ervenyes(pakolas)) if (!problema.Ervenyes(pakolas))
{ {
ertek = -1; ertek = -1;
} }
@@ -135,7 +132,7 @@ namespace OE.ALGA.Optimalizalas
lepesszam = nyersero.LepesSzam; lepesszam = nyersero.LepesSzam;
return megoldas; return megoldas;
} }
public double OptimalisErtek() public float OptimalisErtek()
{ {
return problema.OsszErtek(OptimalisMegoldas()); return problema.OsszErtek(OptimalisMegoldas());
} }

View File

@@ -1,162 +1,162 @@
// using NUnit.Framework; using NUnit.Framework;
// using System; using System;
// using OE.ALGA.Optimalizalas; using OE.ALGA.Optimalizalas;
// namespace OE.ALGA.Tesztek.Optimalizalas namespace OE.ALGA.Tesztek.Optimalizalas
// { {
// [TestFixture(Category = "Optimalizalas", TestName = "07 - Hátiszák Tesztek")] [TestFixture(Category = "Optimalizalas", TestName = "07 - Hátiszák Tesztek")]
// public class HatizsakTesztek public class HatizsakTesztek
// { {
// [TestCase] [TestCase]
// public void UresTeszt() public void UresTeszt()
// { {
// HatizsakProblema problema = new HatizsakProblema(0, 0, [], []); HatizsakProblema problema = new HatizsakProblema(0, 0, [], []);
// Assert.Multiple(() => Assert.Multiple(() =>
// { {
// Assert.That(problema.OsszSuly(PakolasTesztEsetek.uresPakolas), Is.EqualTo(0)); Assert.That(problema.OsszSuly(PakolasTesztEsetek.uresPakolas), Is.EqualTo(0));
// Assert.That(problema.OsszSuly(PakolasTesztEsetek.teljesPakolas), Is.EqualTo(0)); Assert.That(problema.OsszSuly(PakolasTesztEsetek.teljesPakolas), Is.EqualTo(0));
// Assert.That(problema.OsszSuly(PakolasTesztEsetek.feligPakolas), Is.EqualTo(0)); Assert.That(problema.OsszSuly(PakolasTesztEsetek.feligPakolas), Is.EqualTo(0));
// }); });
// Assert.Multiple(() => Assert.Multiple(() =>
// { {
// Assert.That(problema.OsszErtek(PakolasTesztEsetek.uresPakolas), Is.EqualTo(0)); Assert.That(problema.OsszErtek(PakolasTesztEsetek.uresPakolas), Is.EqualTo(0));
// Assert.That(problema.OsszErtek(PakolasTesztEsetek.teljesPakolas), Is.EqualTo(0)); Assert.That(problema.OsszErtek(PakolasTesztEsetek.teljesPakolas), Is.EqualTo(0));
// Assert.That(problema.OsszErtek(PakolasTesztEsetek.feligPakolas), Is.EqualTo(0)); Assert.That(problema.OsszErtek(PakolasTesztEsetek.feligPakolas), Is.EqualTo(0));
// }); });
// Assert.Multiple(() => Assert.Multiple(() =>
// { {
// Assert.That(problema.Ervenyes(PakolasTesztEsetek.uresPakolas), Is.True); Assert.That(problema.Ervenyes(PakolasTesztEsetek.uresPakolas), Is.True);
// Assert.That(problema.Ervenyes(PakolasTesztEsetek.teljesPakolas), Is.True); Assert.That(problema.Ervenyes(PakolasTesztEsetek.teljesPakolas), Is.True);
// Assert.That(problema.Ervenyes(PakolasTesztEsetek.feligPakolas), Is.True); Assert.That(problema.Ervenyes(PakolasTesztEsetek.feligPakolas), Is.True);
// }); });
// } }
// [TestCase] [TestCase]
// public void SulyTeszt() public void SulyTeszt()
// { {
// 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);
// Assert.Multiple(() => Assert.Multiple(() =>
// { {
// Assert.That(problema.OsszSuly(PakolasTesztEsetek.uresPakolas), Is.EqualTo(0)); Assert.That(problema.OsszSuly(PakolasTesztEsetek.uresPakolas), Is.EqualTo(0));
// Assert.That(problema.OsszSuly(PakolasTesztEsetek.teljesPakolas), Is.EqualTo(10)); Assert.That(problema.OsszSuly(PakolasTesztEsetek.teljesPakolas), Is.EqualTo(10));
// Assert.That(problema.OsszSuly(PakolasTesztEsetek.feligPakolas), Is.EqualTo(2)); Assert.That(problema.OsszSuly(PakolasTesztEsetek.feligPakolas), Is.EqualTo(2));
// }); });
// } }
// [TestCase] [TestCase]
// public void JosagTeszt() public void JosagTeszt()
// { {
// 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);
// Assert.Multiple(() => Assert.Multiple(() =>
// { {
// Assert.That(problema.OsszErtek(PakolasTesztEsetek.uresPakolas), Is.EqualTo(0)); Assert.That(problema.OsszErtek(PakolasTesztEsetek.uresPakolas), Is.EqualTo(0));
// Assert.That(problema.OsszErtek(PakolasTesztEsetek.teljesPakolas), Is.EqualTo(29)); Assert.That(problema.OsszErtek(PakolasTesztEsetek.teljesPakolas), Is.EqualTo(29));
// Assert.That(problema.OsszErtek(PakolasTesztEsetek.feligPakolas), Is.EqualTo(11)); Assert.That(problema.OsszErtek(PakolasTesztEsetek.feligPakolas), Is.EqualTo(11));
// }); });
// } }
// [TestCase] [TestCase]
// public void ErvenyesTeszt() public void ErvenyesTeszt()
// { {
// 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);
// Assert.Multiple(() => Assert.Multiple(() =>
// { {
// Assert.That(problema.Ervenyes(PakolasTesztEsetek.uresPakolas), Is.True); Assert.That(problema.Ervenyes(PakolasTesztEsetek.uresPakolas), Is.True);
// Assert.That(problema.Ervenyes(PakolasTesztEsetek.teljesPakolas), Is.False); Assert.That(problema.Ervenyes(PakolasTesztEsetek.teljesPakolas), Is.False);
// Assert.That(problema.Ervenyes(PakolasTesztEsetek.feligPakolas), Is.True); Assert.That(problema.Ervenyes(PakolasTesztEsetek.feligPakolas), Is.True);
// }); });
// } }
// } }
// [TestFixture(Category = "Optimalizalas", TestName = "07 - Nyers Ero Tesztek")] [TestFixture(Category = "Optimalizalas", TestName = "07 - Nyers Ero Tesztek")]
// public class NyersEroTesztek public class NyersEroTesztek
// { {
// [TestCase] [TestCase]
// public void UresTeszt() public void UresTeszt()
// { {
// int[] A = { 4, 6, 7, 4, 2, 1 }; int[] A = { 4, 6, 7, 4, 2, 1 };
// NyersEro<int> opt = new NyersEro<int>( NyersEro<int> opt = new NyersEro<int>(
// 0, 0,
// x => { Guardian.Recursion.CheckStackTrace(); return A[x - 1]; }, x => { Guardian.Recursion.CheckStackTrace(); return A[x - 1]; },
// x => { Guardian.Recursion.CheckStackTrace(); return x; }); x => { Guardian.Recursion.CheckStackTrace(); return x; });
// Assert.Multiple(() => Assert.Multiple(() =>
// { {
// Assert.That(opt.OptimalisMegoldas(), Is.EqualTo(4)); Assert.That(opt.OptimalisMegoldas(), Is.EqualTo(4));
// Assert.That(opt.LepesSzam, Is.EqualTo(0)); Assert.That(opt.LepesSzam, Is.EqualTo(0));
// }); });
// } }
// [TestCase] [TestCase]
// public void TombLegnagyobbEleme() public void TombLegnagyobbEleme()
// { {
// int[] A = { 4, 6, 7, 4, 2, 1 }; int[] A = { 4, 6, 7, 4, 2, 1 };
// NyersEro<int> opt = new NyersEro<int>( NyersEro<int> opt = new NyersEro<int>(
// A.Length, A.Length,
// x => { Guardian.Recursion.CheckStackTrace(); return A[x - 1]; }, x => { Guardian.Recursion.CheckStackTrace(); return A[x - 1]; },
// x => { Guardian.Recursion.CheckStackTrace(); return x; }); x => { Guardian.Recursion.CheckStackTrace(); return x; });
// Assert.Multiple(() => Assert.Multiple(() =>
// { {
// Assert.That(opt.OptimalisMegoldas(), Is.EqualTo(7)); Assert.That(opt.OptimalisMegoldas(), Is.EqualTo(7));
// Assert.That(opt.LepesSzam, Is.EqualTo(5)); Assert.That(opt.LepesSzam, Is.EqualTo(5));
// }); });
// } }
// } }
// [TestFixture(Category = "Optimalizalas", TestName = "07 - Nyers Ero Hátizsák Pakolás Tesztek")] [TestFixture(Category = "Optimalizalas", TestName = "07 - Nyers Ero Hátizsák Pakolás Tesztek")]
// public class NyersEroHatizsakPakolasTesztek public class NyersEroHatizsakPakolasTesztek
// { {
// [TestCase] [TestCase]
// public void UresTeszt() public void UresTeszt()
// { {
// HatizsakProblema problema = new HatizsakProblema(0, 0, [], []); HatizsakProblema problema = new HatizsakProblema(0, 0, [], []);
// NyersEroHatizsakPakolas opt = new NyersEroHatizsakPakolas(problema); NyersEroHatizsakPakolas opt = new NyersEroHatizsakPakolas(problema);
// Assert.Multiple(() => Assert.Multiple(() =>
// { {
// Assert.That(opt.OptimalisErtek(), Is.EqualTo(0)); Assert.That(opt.OptimalisErtek(), Is.EqualTo(0));
// Assert.That(opt.OptimalisMegoldas(), Is.EquivalentTo(Array.Empty<bool>())); Assert.That(opt.OptimalisMegoldas(), Is.EquivalentTo(Array.Empty<bool>()));
// Assert.That(opt.LepesSzam, Is.EqualTo(0)); Assert.That(opt.LepesSzam, Is.EqualTo(0));
// }); });
// } }
// [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);
// NyersEroHatizsakPakolas opt = new NyersEroHatizsakPakolas(problema); NyersEroHatizsakPakolas opt = new NyersEroHatizsakPakolas(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(63)); Assert.That(opt.LepesSzam, Is.EqualTo(63));
// }); });
// } }
// [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);
// NyersEroHatizsakPakolas opt = new NyersEroHatizsakPakolas(problema); NyersEroHatizsakPakolas opt = new NyersEroHatizsakPakolas(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(63)); Assert.That(opt.LepesSzam, Is.EqualTo(63));
// }); });
// } }
// [TestCase] [TestCase]
// public void NagyPeldaMegoldasErtekTeszt() public void NagyPeldaMegoldasErtekTeszt()
// { {
// 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);
// NyersEroHatizsakPakolas opt = new NyersEroHatizsakPakolas(problema); NyersEroHatizsakPakolas opt = new NyersEroHatizsakPakolas(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(131071)); Assert.That(opt.LepesSzam, Is.EqualTo(131071));
// }); });
// } }
// [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);
// NyersEroHatizsakPakolas opt = new NyersEroHatizsakPakolas(problema); NyersEroHatizsakPakolas opt = new NyersEroHatizsakPakolas(problema);
// Assert.Multiple(() => Assert.Multiple(() =>
// { {
// Assert.That(opt.OptimalisMegoldas(), Is.EquivalentTo(PakolasTesztEsetek.nagy_optimalis_pakolas)); Assert.That(opt.OptimalisMegoldas(), Is.EquivalentTo(PakolasTesztEsetek.nagy_optimalis_pakolas));
// Assert.That(opt.LepesSzam, Is.EqualTo(131071)); Assert.That(opt.LepesSzam, Is.EqualTo(131071));
// }); });
// } }
// } }
// } }