public void Objsense(string[] txt, Kisit amac) { if (txt[txt.Length - 1] == "MAX") { amac.objmax = true; } }
public void Negatif(Kisit z) { foreach (Degisken d in z.degiskenler) { d.katsayi *= -1; } }
public bool Durma(Kisit z, bool max) { bool flag = false; if (max == true) { for (int i = 0; i < z.degiskenler.Count - 2; i++) { if (((Degisken)z.degiskenler[i]).katsayi < 0) { flag = true; break; } } return(flag); } else { for (int i = 0; i < z.degiskenler.Count - 2; i++) { if (((Degisken)z.degiskenler[i]).katsayi > 0) { flag = true; break; } } return(flag); } }
public void Azalt(Kisit kısıt, double[] anahtarsatirelemanlari, int sutun) { double[] temp = new double[anahtarsatirelemanlari.Length]; for (int i = 0; i < temp.Length; i++) { temp[i] = anahtarsatirelemanlari[i]; } for (int i = 0; i < temp.Length; i++) { temp[i] *= ((Degisken)(kısıt.degiskenler[sutun])).katsayi; } for (int i = 0; i < kısıt.degiskenler.Count; i++) { ((Degisken)(kısıt.degiskenler[i])).katsayi -= temp[i]; } }
public void TutarliZ(Kisit z, Kisit lim, string girenDegAd, bool girenDegYapay) { double sayi = 0; foreach (Degisken d in z.degiskenler) { if (d.ad == girenDegAd && !girenDegYapay) { sayi = d.katsayi; break; } } for (int i = 0; i < z.degiskenler.Count; i++) { ((Degisken)z.degiskenler[i]).katsayi -= ((Degisken)lim.degiskenler[i]).katsayi * sayi; } }
public void KisitEkle(string[] txt, List <Kisit> kisitlar) { Kisit kisit; for (int i = 0; i < txt.Length; i++) { switch (txt[i]) { case "N": kisit = new Kisit(txt[i + 1], txt[i]); kisitlar.Add(kisit); break; case "L": kisit = new Kisit(txt[i + 1], txt[i]); kisitlar.Add(kisit); break; case "G": kisit = new Kisit(txt[i + 1], txt[i]); kisitlar.Add(kisit); break; case "E": kisit = new Kisit(txt[i + 1], txt[i]); kisitlar.Add(kisit); break; case "UP": kisit = new Kisit(txt[i + 1] + txt[i + 2], txt[i]); kisitlar.Add(kisit); break; case "LO": kisit = new Kisit(txt[i + 1] + txt[i + 2], txt[i]); kisitlar.Add(kisit); break; } } }
static void Main(string[] args) { File.Delete(System.IO.Directory.GetCurrentDirectory() + "\\" + "R.txt"); File.Delete(System.IO.Directory.GetCurrentDirectory() + "\\" + "S.txt"); bool flag1 = true; string filename = ""; FileStream fs; StreamReader sr; string data = ""; string text = "", text1 = "", text2 = "", text3 = "", text4 = "", text5 = ""; Stopwatch watch = new Stopwatch(); watch.Start(); while (flag1) { try { Console.WriteLine("Dosya adi:"); filename = Console.ReadLine(); filename = System.IO.Directory.GetCurrentDirectory() + "\\" + filename + ".mps"; fs = new FileStream(filename, FileMode.Open, FileAccess.Read); sr = new StreamReader(fs); while (data != null) { text += data; data = sr.ReadLine(); } sr.Close(); fs.Close(); flag1 = false; } catch { Console.WriteLine("Dosya bulunamadi."); flag1 = true; } } int ix = 0; try { ix = text.IndexOf("OBJSENSE"); text = text.Remove(0, ix); ix = text.IndexOf("ROWS"); text1 = text.Substring(0, ix); text = text.Remove(0, ix); } catch { ix = text.IndexOf("ROWS"); text = text.Remove(0, ix); } ix = text.IndexOf("COLUMNS"); text2 = text.Substring(0, ix); text = text.Remove(0, ix); ix = text.IndexOf("RHS"); text3 = text.Substring(0, ix); text = text.Remove(0, ix); bool bayrak = false; try { ix = text.IndexOf("BOUNDS"); text4 = text.Substring(0, ix); text = text.Remove(0, ix); } catch { ix = text.IndexOf("ENDATA"); text4 = text.Substring(0, ix); text = text.Remove(0, ix); bayrak = true; } if (bayrak == false) { ix = text.IndexOf("ENDATA"); text5 = text.Substring(0, ix); text = text.Remove(0, ix); } string[] txt1, txt2, txt3, txt4, txt5; txt1 = text1.Split(new[] { '\n', ' ' }, StringSplitOptions.RemoveEmptyEntries); txt2 = text2.Split(new[] { '\n', ' ' }, StringSplitOptions.RemoveEmptyEntries); txt3 = text3.Split(new[] { '\n', ' ' }, StringSplitOptions.RemoveEmptyEntries); txt4 = text4.Split(new[] { '\n', ' ' }, StringSplitOptions.RemoveEmptyEntries); txt5 = text5.Split(new[] { '\n', ' ' }, StringSplitOptions.RemoveEmptyEntries); List <Kisit> kisitlar = new List <Kisit>(); Islem islemci = new Islem(); islemci.KisitEkle(txt2, kisitlar); islemci.DegiskenEkle(txt3, kisitlar, "COLUMNS"); islemci.KatsayiEkle(txt3, kisitlar, "COLUMNS"); if (txt5.Length != 0) { islemci.KisitEkle(txt5, kisitlar); islemci.DegiskenEkle(txt5, kisitlar, "BOUNDS"); islemci.Free(txt5, kisitlar); } foreach (Kisit k in kisitlar) { k.YapayDegiskenEkle(kisitlar); } islemci.DegiskenEkle(txt4, kisitlar, "RHS"); islemci.KatsayiEkle(txt4, kisitlar, "RHS"); if (txt5.Length != 0) { islemci.BoundsRHS(txt5, kisitlar); } foreach (Kisit k in kisitlar) { if (((Degisken)k.degiskenler[k.degiskenler.Count - 1]).katsayi < 0) { ((Degisken)k.degiskenler[k.degiskenler.Count - 1]).katsayi *= -1; } } Kisit r = new Kisit("R", "R"); r.objmax = false; for (int i = 0; i < ((Kisit)(kisitlar[0])).degiskenler.Count; i++) { Degisken yeni = new Degisken(); yeni.ad = ((Degisken)(((Kisit)(kisitlar[0])).degiskenler[i])).ad; yeni.isR = ((Degisken)(((Kisit)(kisitlar[0])).degiskenler[i])).isR; yeni.isS = ((Degisken)(((Kisit)(kisitlar[0])).degiskenler[i])).isS; yeni.isFR = ((Degisken)(((Kisit)(kisitlar[0])).degiskenler[i])).isFR; yeni.katsayi = 0; foreach (Kisit k in kisitlar) { if (k.tip == "G" || k.tip == "E" || k.tip == "LO") { yeni.katsayi += ((Degisken)(k.degiskenler[i])).katsayi; } } if (yeni.isR == true) { yeni.katsayi = 0; } r.degiskenler.Add(yeni); } kisitlar.Add(r); Kisit z = new Kisit("z", "N"); Simplex s = new Simplex(); z = kisitlar[0]; islemci.Objsense(txt1, z); kisitlar.Remove(kisitlar[0]); bool flag = false; foreach (Degisken d in kisitlar[0].degiskenler) { if (d.isR == true) { flag = true; break; } } int secim = -1, secim1 = 0; bool flag2 = true; while (flag2) { try { Console.WriteLine("1.Asama -1\n2.Asama -2\nSonuc -3"); secim = Convert.ToInt16(Console.ReadLine()); if (secim == 1 || secim == 2 || secim == 3) { flag2 = false; } else { Console.WriteLine("Gecersiz giriş."); } } catch { Console.WriteLine("Gecersiz giriş."); flag2 = true; } } if (!flag2 && secim != 3) { flag2 = true; while (flag2) { try { Console.WriteLine("Bir iterasyona gitmek için iterasyon sayisini girin.\nSonucu görmek için - -1"); secim1 = Convert.ToInt16(Console.ReadLine()); flag2 = false; } catch { Console.WriteLine("Gecersiz giriş."); flag2 = true; } } } //1.asama int sayac = 0; int keysutun = -10; while (flag) { int test; double[] temp = new double[kisitlar[kisitlar.Count - 1].degiskenler.Count]; int anahtar; test = s.AnahtarSutun(kisitlar[kisitlar.Count - 1].degiskenler, !r.objmax, kisitlar); if (s.AnahtarSutunElemanlari(test, kisitlar)) { anahtar = s.AnahtarSatirElemanlari(kisitlar, test); for (int i = 0; i < kisitlar[anahtar].degiskenler.Count; i++) { temp[i] = ((Degisken)(kisitlar[anahtar].degiskenler[i])).katsayi; } for (int i = 0; i < kisitlar.Count; i++) { s.Azalt(kisitlar[i], temp, test); } for (int i = 0; i < kisitlar[anahtar].degiskenler.Count; i++) { ((Degisken)(kisitlar[anahtar].degiskenler[i])).katsayi = temp[i]; } sayac++; flag = s.Durma(kisitlar[kisitlar.Count - 1], r.objmax); if (secim == 1 && sayac == secim1) { islemci.ConsolePrintf(kisitlar, sayac); } islemci.Print(kisitlar, "R.txt", sayac); if (keysutun != anahtar) { keysutun = anahtar; } else { flag = false; } } else { flag = false; } } kisitlar.Remove(kisitlar[kisitlar.Count - 1]); s.Negatif(z); kisitlar.Add(z); s.RemoveR(kisitlar); foreach (Kisit kisit in kisitlar) { if (kisit.girendegYapay == false) { s.TutarliZ(kisitlar[kisitlar.Count - 1], kisit, kisit.girendeg, kisit.girendegYapay); } } flag = true; //2.asama sayac = 0; keysutun = -10; while (flag) { int test; double[] temp = new double[kisitlar[kisitlar.Count - 1].degiskenler.Count]; int anahtar; test = s.AnahtarSutun(kisitlar[kisitlar.Count - 1].degiskenler, !z.objmax, kisitlar); if (s.AnahtarSutunElemanlari(test, kisitlar)) { anahtar = s.AnahtarSatirElemanlari(kisitlar, test); for (int i = 0; i < kisitlar[anahtar].degiskenler.Count; i++) { temp[i] = ((Degisken)(kisitlar[anahtar].degiskenler[i])).katsayi; } for (int i = 0; i < kisitlar.Count; i++) { s.Azalt(kisitlar[i], temp, test); } for (int i = 0; i < kisitlar[anahtar].degiskenler.Count; i++) { ((Degisken)(kisitlar[anahtar].degiskenler[i])).katsayi = temp[i]; } flag = s.Durma(kisitlar[kisitlar.Count - 1], z.objmax); sayac++; if (secim == 1 && sayac == secim1) { islemci.ConsolePrintf(kisitlar, sayac); } islemci.Print(kisitlar, "S.txt", sayac); if (keysutun != anahtar) { keysutun = anahtar; } else { flag = false; } } else { flag = false; } } if (sayac < secim1) { Console.WriteLine("Islem daha kisa surdu."); } Console.WriteLine("\n"); if (secim1 == -1 || secim == 3) { watch.Stop(); foreach (Kisit k in kisitlar) { if (k.girendegYapay != true) { if (k.tip != "N") { Console.Write(k.girendeg + "\t"); } else if (k.tip == "N" || k.tip == "R") { Console.Write(k.ad + "\t"); } Console.Write((((Degisken)k.degiskenler[k.degiskenler.Count - 1]).katsayi).ToString("#,##0.00")); Console.WriteLine("\n"); } } Console.WriteLine("Çalisma süresi: " + watch.Elapsed.Hours.ToString() + "." + watch.Elapsed.Minutes.ToString() + "." + watch.Elapsed.Seconds.ToString() + "." + watch.Elapsed.Milliseconds.ToString()); } Console.ReadKey(); }