ahhhhhhhhfuézbgí-sdehzfxrAIŐHQBG

This commit is contained in:
Lendaia Mirai
2025-12-01 01:51:37 +01:00
parent ac894d978c
commit 07419d265b
3 changed files with 195 additions and 127 deletions

View File

@@ -1,4 +1,5 @@
using System; using System;
using System.Formats.Asn1;
using System.Linq; using System.Linq;
using Microsoft.Identity.Client; using Microsoft.Identity.Client;
@@ -6,16 +7,16 @@ namespace OE.ALGA.Optimalizalas
{ {
public class VisszalepesesOptimalizacio<T> public class VisszalepesesOptimalizacio<T>
{ {
int n; public int n;
int[] M; public int[] M;
T[,] R; public T[,] R;
Func<int, T, bool> ft; public Func<int, T, bool> ft;
Func<int, T, T[], bool> fk; public Func<int, T, T[], bool> fk;
Func<T[], int> 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[], int> 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;
@@ -25,7 +26,7 @@ namespace OE.ALGA.Optimalizalas
this.josag = josag; this.josag = josag;
} }
public bool[] OptimalisMegoldas() public T[] OptimalisMegoldas()
{ {
int szint = 0; int szint = 0;
T[] E = new T[n]; T[] E = new T[n];
@@ -76,7 +77,7 @@ namespace OE.ALGA.Optimalizalas
public class VisszalepesesHatizsakPakolas public class VisszalepesesHatizsakPakolas
{ {
HatizsakProblema problema; HatizsakProblema problema;
public int LepesSzam {get;} public int LepesSzam {get; set;}
public VisszalepesesHatizsakPakolas(HatizsakProblema problema) public VisszalepesesHatizsakPakolas(HatizsakProblema problema)
{ {
@@ -84,25 +85,91 @@ namespace OE.ALGA.Optimalizalas
} }
virtual public bool[] OptimalisMegoldas() virtual public bool[] OptimalisMegoldas()
{ {
int[] M; int[] M = new int[problema.N];
bool[] R;
}
public int OptimalisErtek()
{
bool[,] R = new bool[problema.N, 2];
for (int i = 0; i < problema.N; i++)
{
M[i] = 2;
R[i, 0] = true;
R[i, 1] = false;
}
VisszalepesesOptimalizacio<bool> visszalepesesoptimalizacio = new VisszalepesesOptimalizacio<bool>(problema.N, M, R, Ft, Fk, Josag);
bool[] eredmeny = visszalepesesoptimalizacio.OptimalisMegoldas();
LepesSzam = visszalepesesoptimalizacio.Lepesszam;
return eredmeny;
} }
public float OptimalisErtek()
{
return problema.OsszErtek(OptimalisMegoldas());
}
private float Josag(bool[] pakolas)
{
float ertek = 0;
if (!problema.Ervenyes(pakolas))
{
ertek = -1;
}
else
{
ertek = problema.OsszErtek(pakolas);
}
return ertek;
}
private bool Ft(int egesz, bool logikai)
{
return true;
}
private bool Fk(int egesz, bool logikai, bool[] tomb)
{
int weight = 0;
for (int i = 0; i < problema.N; i++)
{
if(tomb[i])
{
weight += problema.W[i];
}
}
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[], int> 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, T[] E, bool van, T[] O) public override void Backtrack(int szint, ref T[] E, ref bool van, ref T[] O)
{ {
int i = 0;
while(i < M[szint])
{
Lepesszam++;
i++;
if (ft(szint, R[szint, i]))
{
if(fk(szint, R[szint, i], E) && fb(szint, O) > 6)
{
E[szint] = R[szint, i];
if (szint == n)
{
if ((!van) || josag(E) > josag(O))
{
O = E;
}
van = true;
}
else
{
Backtrack(szint+1, ref E, ref van, ref O);
}
}
}
}
} }
} }
public class SzetvalasztasEsKorlatozasHatizsakPakolas : VisszalepesesHatizsakPakolas public class SzetvalasztasEsKorlatozasHatizsakPakolas : VisszalepesesHatizsakPakolas
@@ -112,7 +179,8 @@ namespace OE.ALGA.Optimalizalas
} }
public override bool[] OptimalisMegoldas() public override bool[] OptimalisMegoldas()
{ {
bool[] asd = new bool[2] {true, true};
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));
// }); });
// } }
// } }
//} }

View File

@@ -1,6 +1,6 @@
// using Microsoft.VisualStudio.TestTools.UnitTesting; // using Microsoft.VisualStudio.TestTools.UnitTesting;
// using OE.ALGA.Optimalizalas; // using OE.ALGA.Optimalizalas;
//
// namespace OE.ALGA.Tesztek // namespace OE.ALGA.Tesztek
// { // {
// [TestClass()] // [TestClass()]
@@ -13,7 +13,7 @@
// VisszalepesesHatizsakPakolas opt = new VisszalepesesHatizsakPakolas(problema); // VisszalepesesHatizsakPakolas opt = new VisszalepesesHatizsakPakolas(problema);
// Assert.AreEqual(PakolasTesztEsetek.jegyzet_optimalis_ertek, opt.OptimalisErtek()); // Assert.AreEqual(PakolasTesztEsetek.jegyzet_optimalis_ertek, opt.OptimalisErtek());
// } // }
//
// [TestMethod()] // [TestMethod()]
// public void JegyzetbenLevoPeldaMegoldasTeszt() //F2. // public void JegyzetbenLevoPeldaMegoldasTeszt() //F2.
// { // {
@@ -21,7 +21,7 @@
// VisszalepesesHatizsakPakolas opt = new VisszalepesesHatizsakPakolas(problema); // VisszalepesesHatizsakPakolas opt = new VisszalepesesHatizsakPakolas(problema);
// CollectionAssert.AreEqual(PakolasTesztEsetek.jegyzet_optimalis_pakolas, opt.OptimalisMegoldas()); // CollectionAssert.AreEqual(PakolasTesztEsetek.jegyzet_optimalis_pakolas, opt.OptimalisMegoldas());
// } // }
//
// [TestMethod()] // [TestMethod()]
// public void NagyPeldaMegoldasTeszt() //F2. // public void NagyPeldaMegoldasTeszt() //F2.
// { // {
@@ -29,7 +29,7 @@
// VisszalepesesHatizsakPakolas opt = new VisszalepesesHatizsakPakolas(problema); // VisszalepesesHatizsakPakolas opt = new VisszalepesesHatizsakPakolas(problema);
// Assert.AreEqual(PakolasTesztEsetek.nagy_optimalis_ertek, opt.OptimalisErtek()); // Assert.AreEqual(PakolasTesztEsetek.nagy_optimalis_ertek, opt.OptimalisErtek());
// } // }
//
// [TestMethod()] // [TestMethod()]
// public void LepesszamVizsgalat() //F2. // public void LepesszamVizsgalat() //F2.
// { // {
@@ -39,7 +39,7 @@
// Console.WriteLine("Lépésszám: " + opt.LepesSzam); // Console.WriteLine("Lépésszám: " + opt.LepesSzam);
// } // }
// } // }
//
// [TestClass()] // [TestClass()]
// public class SzetvalasztasEsKorlatozasTesztek // public class SzetvalasztasEsKorlatozasTesztek
// { // {
@@ -50,7 +50,7 @@
// SzetvalasztasEsKorlatozasHatizsakPakolas opt = new SzetvalasztasEsKorlatozasHatizsakPakolas(problema); // SzetvalasztasEsKorlatozasHatizsakPakolas opt = new SzetvalasztasEsKorlatozasHatizsakPakolas(problema);
// Assert.AreEqual(PakolasTesztEsetek.jegyzet_optimalis_ertek, opt.OptimalisErtek()); // Assert.AreEqual(PakolasTesztEsetek.jegyzet_optimalis_ertek, opt.OptimalisErtek());
// } // }
//
// [TestMethod()] // [TestMethod()]
// public void JegyzetbenLevoPeldaMegoldasTeszt() //F4. // public void JegyzetbenLevoPeldaMegoldasTeszt() //F4.
// { // {
@@ -58,7 +58,7 @@
// SzetvalasztasEsKorlatozasHatizsakPakolas opt = new SzetvalasztasEsKorlatozasHatizsakPakolas(problema); // SzetvalasztasEsKorlatozasHatizsakPakolas opt = new SzetvalasztasEsKorlatozasHatizsakPakolas(problema);
// CollectionAssert.AreEqual(PakolasTesztEsetek.jegyzet_optimalis_pakolas, opt.OptimalisMegoldas()); // CollectionAssert.AreEqual(PakolasTesztEsetek.jegyzet_optimalis_pakolas, opt.OptimalisMegoldas());
// } // }
//
// [TestMethod()] // [TestMethod()]
// public void NagyPeldaMegoldasTeszt() //F4. // public void NagyPeldaMegoldasTeszt() //F4.
// { // {
@@ -66,7 +66,7 @@
// SzetvalasztasEsKorlatozasHatizsakPakolas opt = new SzetvalasztasEsKorlatozasHatizsakPakolas(problema); // SzetvalasztasEsKorlatozasHatizsakPakolas opt = new SzetvalasztasEsKorlatozasHatizsakPakolas(problema);
// Assert.AreEqual(PakolasTesztEsetek.nagy_optimalis_ertek, opt.OptimalisErtek()); // Assert.AreEqual(PakolasTesztEsetek.nagy_optimalis_ertek, opt.OptimalisErtek());
// } // }
//
// [TestMethod()] // [TestMethod()]
// public void LepesszamVizsgalat() //F4. // public void LepesszamVizsgalat() //F4.
// { // {