public void Free(string[] txt, List <Kisit> kisitlar) { for (int i = 0; i < txt.Length; i++) { if (txt[i] == "FR" || txt[i] == "LO") { foreach (Kisit k in kisitlar) { Degisken yeni = new Degisken(); yeni.ad = "-" + txt[i + 2]; yeni.isFR = true; k.degiskenler.Insert(k.degiskenler.Count, yeni); } } } foreach (Kisit k in kisitlar) { foreach (Degisken d in k.degiskenler) { if (d.isFR == true) { foreach (Degisken r in k.degiskenler) { if (d.ad.Contains(r.ad)) { d.katsayi = r.katsayi; } } d.katsayi *= -1; } } } }
public int AnahtarSutun(ArrayList degiskenler, bool minmi, List <Kisit> kisitlar) { int index = 0; if (minmi) { Degisken pivotdeg = (Degisken)degiskenler[0]; for (int i = 1; i < degiskenler.Count - 2; i++) { if (pivotdeg.katsayi < ((Degisken)degiskenler[i]).katsayi) { if (AnahtarSutunElemanlari(i, kisitlar)) { pivotdeg = (Degisken)degiskenler[i]; index = i; } } } return(index); } else { Degisken pivotdeg = (Degisken)degiskenler[0]; for (int i = 1; i < degiskenler.Count - 2; i++) { if (pivotdeg.katsayi > ((Degisken)degiskenler[i]).katsayi) { if (AnahtarSutunElemanlari(i, kisitlar)) { pivotdeg = (Degisken)degiskenler[i]; index = i; } } } return(index); } }
public void YapayDegiskenEkle(List <Kisit> kisitlar) { char temp; switch (this.tip) { case "L": temp = this.yapaydegadi; foreach (Kisit k in kisitlar) { Degisken yeni = new Degisken(); yeni.isS = true; yeni.ad = temp.ToString(); k.degiskenler.Add(yeni); k.yapaydegadi++; } ((Degisken)(this.degiskenler[degiskenler.Count - 1])).katsayi = 1; girendeg = temp.ToString(); girendegYapay = true; break; case "G": temp = this.yapaydegadi; foreach (Kisit k in kisitlar) { Degisken yeni = new Degisken(); yeni.isS = true; yeni.ad = temp.ToString(); k.degiskenler.Add(yeni); k.yapaydegadi++; } ((Degisken)(this.degiskenler[degiskenler.Count - 1])).katsayi = -1; temp = this.yapaydegadi; girendegYapay = true; foreach (Kisit k in kisitlar) { Degisken yeni = new Degisken(); yeni.isR = true; if (k.tip == "N") { yeni.katsayi = 19; } yeni.ad = temp.ToString(); k.degiskenler.Add(yeni); k.yapaydegadi++; } ((Degisken)(this.degiskenler[degiskenler.Count - 1])).katsayi = 1; girendeg = temp.ToString(); girendegYapay = true; break; case "E": temp = this.yapaydegadi; foreach (Kisit k in kisitlar) { Degisken yeni = new Degisken(); yeni.isR = true; if (k.tip == "N") { yeni.katsayi = 19; } yeni.ad = temp.ToString(); k.degiskenler.Add(yeni); k.yapaydegadi++; } ((Degisken)(this.degiskenler[degiskenler.Count - 1])).katsayi = 1; girendeg = temp.ToString(); girendegYapay = true; break; case "UP": temp = this.yapaydegadi; foreach (Kisit k in kisitlar) { Degisken yeni = new Degisken(); yeni.isS = true; yeni.ad = temp.ToString(); k.degiskenler.Add(yeni); k.yapaydegadi++; } ((Degisken)(this.degiskenler[degiskenler.Count - 1])).katsayi = 1; girendeg = temp.ToString(); girendegYapay = true; break; case "LO": temp = this.yapaydegadi; foreach (Kisit k in kisitlar) { Degisken yeni = new Degisken(); yeni.isS = true; yeni.ad = temp.ToString(); k.degiskenler.Add(yeni); k.yapaydegadi++; } ((Degisken)(this.degiskenler[degiskenler.Count - 1])).katsayi = -1; temp = this.yapaydegadi; girendegYapay = true; foreach (Kisit k in kisitlar) { Degisken yeni = new Degisken(); yeni.isR = true; if (k.tip == "N") { yeni.katsayi = 666; } yeni.ad = temp.ToString(); k.degiskenler.Add(yeni); k.yapaydegadi++; } ((Degisken)(this.degiskenler[degiskenler.Count - 1])).katsayi = 1; girendeg = temp.ToString(); girendegYapay = true; 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(); }
public void DegiskenEkle(string[] txt, List <Kisit> kisitlar, string table) { found = false; for (int i = 1; i < txt.Length; i++) { foreach (Kisit k in kisitlar) { if (txt[i] == k.ad) { found = true; break; } } if (found == false && txt[i] != table) { try { Convert.ToDouble(txt[i]); } catch { foreach (Kisit k in kisitlar) { Degisken d = new Degisken(); d.ad = txt[i]; foreach (Degisken degisken in k.degiskenler) { if (degisken.ad == txt[i]) { flag1 = true; break; } } if (!flag1 && d.ad != "UP" && d.ad != "LO" && d.ad != "FR" && d.ad.Contains("BND") == false && d.ad.Contains("BV1") == false && d.ad.Contains("BOUND") == false) { if (table == "BOUNDS" && k.ad.Contains(txt[i]) && k.tip == "UP") { d.katsayi = 1; } else if (table == "BOUNDS" && k.ad.Contains(txt[i]) && k.tip == "LO") { d.katsayi = -1; } k.degiskenler.Add(d); } flag1 = false; } } } found = false; } foreach (Kisit kisit in kisitlar) { if (kisit.tip == "UP" || kisit.tip == "LO") { for (int i = 0; i < kisitlar[0].degiskenler.Count; i++) { if (((Degisken)(kisit.degiskenler[i])).ad != ((Degisken)(kisitlar[0].degiskenler[i])).ad) { Degisken yeni = new Degisken(); yeni.ad = ((Degisken)(kisitlar[0].degiskenler[i])).ad; yeni.katsayi = 0; kisit.degiskenler.Insert(i, yeni); } } } } }