Karar verme teknikleri çatısı altında bulunan karar verme yöntemlerinden belirsizlik altında karar verme problemlerinin çözümünün C# dilinde yazılmış kodlarını paylaşma gereği duydum çünkü, internette bu konuyla alakalı Türkçe ve yabancı kaynak göremedim.Yorum satırlarında gerekli bilgiler verildiği için bir ön açıklama yapma gereği duymadım ama sizler sorularınız olduğu takdirde yorum bırakabilir veya instagram hesabımdan benimle iletişime geçebilirsiniz.İşinize yarayacağını umuyorum iyi çalışmalar dilerim.
int n = 0,
m = 0;
Console.WriteLine("*****Decision Making Under Uncertainty
Automation*****"); // Belirsizlik altında karar verme otomasyonu.
Console.WriteLine("Please enter the values we need"); //
Lütfen ihtiyacımız olan sayıları girin
//Create
the matris ( Matrisi oluşturacağız)
Console.WriteLine("Please enter the matris column pax : "); // lütfen matrisin sütun sayısını
giriniz
n =
Convert.ToInt32(Console.ReadLine()); //
n değişkenine sütunu atadık
Console.WriteLine("Please enter the
matris line pax : "); // lütfe matrisin satır sayısını giriniz
m =
Convert.ToInt32(Console.ReadLine()); // m değişkenine satır sayısını atadık
int[,]
masterValues = new int[n,m]; // matrisimizi n ve m sayılarına göre oluşturduk.
string[]
decisionVariable = new string[n]; // decisionVariable alternatif demek yani
burada alternatiflerin adını tutucaz(örn. network)
//Read
Values // Kullanıcıdan matrise veri girişi yapmasını istiyoruz burada
for (int i
= 0; i < n; i++)
{
for
(int j = 0; j < m; j++)
{
Console.WriteLine("Please enter Values : [" + (i + 1) +
"][" + (j + 1) + "]");
masterValues[i, j] = Convert.ToInt32(Console.ReadLine());
}
}
//
alternatiflerin adını girdireceğiz aşağıdaki döngüde
// ( örn :
network , network + güvenlik)
Console.WriteLine("Please enter the decision variables name :
"); // LÜTFEN ALTERNATİFLERİN ADINI GİRİN
for (int i
= 0; i < n; i++)
{
Console.WriteLine((i + 1) + ". decision name : ");
decisionVariable[i] = Console.ReadLine();
}
Console.Clear(); // bu komutla konsol ekranını temizlemiş olduk yani
önceki yazılanlar silindi.
Console.WriteLine(" ");
//Write
Values On Screen (Kullanıcının girdiği değerleri ekrana yazdırıcaz.)
for (int i
= 0; i < n; i++)
{
for
(int j = 0; j < m; j++)
{
Console.Write(masterValues[i, j] + "\t");
}
Console.WriteLine(" ");
}
//MaxiMax
string
maxiMaxDecisionName = " "; // Maximax işlemi sonucunda seçilen
kararın adını tutacağımız değişkeni tanımladık.
int
maxiMax = 0; // maximax sonuç değerimizi tutacağımız değişkeni tanımladık.
int[]
maxNumber = new int[n]; // Her satırın en büyük değerini tutacağımız diziyi
tanımladık.
int helper
= 0; // her satırdaki büyük değişkeni bulup maxNumber dizisine atmamızı
sağlayacak olan değişken.
for (int i
= 0; i < n; i++)
{
for
(int j = 0; j < m; j++)
//her satırdaki en büyük değeri buluyoruz
{
if
(masterValues[i, j] > helper)
{
helper = masterValues[i, j];
}
}
maxNumber[i] = helper;
}
helper =
0; // bu sefer her
satırın en büyük elemanları arasında en büyük olanı seçeceğimiz için helper
değişkenini tekrardan 0 yaptık.
for (int i
= 0; i < n; i++)
{
if (maxNumber[i]
> helper)
{
maxiMax = maxNumber[i];
maxiMaxDecisionName = decisionVariable[i];
}
}
//MaxiMin
int
maxiMin = 0; // maximin karar değişkenimizi
tutacağımız değişkeni tanımladık
string
maxiMinDecisionName = " "; //
maximin de seçilen alternatifi tutacağımız değişkeni tanımladık
int[]
minNumber = new int[n]; // her satırın
maximin değerini tutacağımız diziyi tanımladık
helper =
100000; /// küçük olan sayıyı bulmak
için helper değişkenine 10000 sayısını atadık.
for (int i
= 0; i < n; i++)
{
for
(int j = 0; j < m; j++) //her
satırdaki en küçük elemanı buluyoruz
{
if
(masterValues[i, j] < helper)
{
helper = masterValues[i, j];
}
}
minNumber[i] = helper;
}
helper =
-500; // en büyük elemanı bulacağımız
için helpera -500 tanımladık
for (int i
= 0; i < n; i++)
{
if
(minNumber[i] > helper)
{
helper = minNumber[i];
maxiMin = minNumber[i];
maxiMinDecisionName = decisionVariable[i];
}
}
//Harwics
Console.WriteLine("Please enter the alpha value : "); // alfa
değeri istiyoruz kullanıcıdan
double
alpha = Convert.ToDouble(Console.ReadLine()); //
double
oneMinusAlpha = (1 - alpha); // burada 1- alfa değişkenine değer olarak 1-alpha
değerini atadık.
int[]
harwics = new int[n];
string
harwicsDecisionName = "";
for (int i
= 0; i < n; i++)
{
harwics[i] = (int)(alpha * maxNumber[i]) + (int)(oneMinusAlpha *
minNumber[i]); // Her satırdaki en büyük elemanla alfayı,
// en küçük elemanla 1- alfayı çarpıyoruz
}
helper =
0;
double
harwicsMax = 0;
for (int i
= 0; i < n; i++)
{
if
(harwics[i] > helper)
// burada her alternatif için bulduğumuz hurwics değerlerinin en
büyüğünü buluyoruz.
{
harwicsMax = harwics[i];
harwicsDecisionName
= decisionVariable[i];
}
}
//Laplace
Criterion
double
temporary = 0;
int[]
laplace = new int[n];
int
laplaceDecision = 0;
string
laplaceDecisionName = "";
for (int i
= 0; i < n; i++)
{
for
(int j = 0; j < m; j++)
{
temporary = temporary + masterValues[i, j]; //geçici değişkene bütün satırın
elemanlarını atıyoruz,
//aşağıda (1 / satır sayısı)na bölebilmek için.
}
temporary *= 0.166666666666667;
laplace[i] = Convert.ToInt32(temporary);
temporary = 0;
}
temporary
= 0;
for (int i
= 0; i < n; i++)
{
if
(laplace[i] > temporary)
// her alternatif için bulduğumuz
laplace değerlerinin en büyük olanını bulduğumuz kısımdayız
{
laplaceDecision = laplace[i];
laplaceDecisionName = decisionVariable[i];
}
}
//MinMax
int[]
minMax = new int[m]; //her
sütunun minmax değerini tutacağımız diziyi tanımladık
int[,]
temporaryMasterValues = new int[n, m]; // minmax işlemi sonrasında matrisin
yeni halini tutacağımız matrisi tanımladık.
int
counter = 0;
int c = 0;
int l = 0;
helper =
-500;
for (int i
= 0; i < n; i++)
// ana matrisimizi yeni matrisin içine kopyalıyoruz
{
for
(int j = 0; j < m; j++)
{
temporaryMasterValues[i, j] = masterValues[i, j];
}
}
for (l =
0; l < m; ) //Burada her sütunun en büyük değerini bulacağımızdan ötürü bir
sayaç yardımıyla bu işlemi gerçekleştirdik
{ // mantığı
ise sayaç satır sayısı kadar döndüğünde satır indisini başa al sütunu ise 1
arttır şeklinde
if
(masterValues[c, l] > helper) // bir yol izliyoruz.
{
helper = masterValues[c, l];
minMax[l] = masterValues[c, l];
}
counter++;
c++;
if
(counter == n)
{
counter = 0;
c = 0;
l++;
helper = -500;
}
}
c = 0;
l = 0;
counter =
0;
for (l =
0; l < m;) //burada
ise her sütunun en büyük elemanını bulduktan sonra o sütune ait elemanlardan
bulduğumuz
{ //sayıyı
çıkartıyoruz.
temporaryMasterValues[c, l] = minMax[l] - (temporaryMasterValues[c, l]);
counter++;
c++;
if
(counter == n)
{
counter = 0;
c
= 0;
l++;
}
}
int[]
minMaxsMaxNumber = new int[n];
int miniMax
= 0;
string
minMaxDecisionName = " ";
//sort
helper =
-500;
for (int i
= 0; i < n; i++) //artık yeni
tabloyu elde ettik ve her satırın en büyüğünü bulup onlar arasından
{ //en
küçüğünü seçeceğimiz kısımdayız.
for
(int j = 0; j < m; j++)
{
if
(temporaryMasterValues[i, j] > helper)
{
helper = temporaryMasterValues[i, j];
}
}
minMaxsMaxNumber[i] = helper;
helper
= -500;
}
helper =
-500;
for (int i
= 0; i < n; i++)
{
if
(minMaxsMaxNumber[i] > helper)
{
miniMax = minMaxsMaxNumber[i];
minMaxDecisionName = decisionVariable[i];
}
}
//
Expected Value(gain) -- (beklenen
değer / kar )
int[]
expectedValue = new int[n];
double[]
expectedValueMultiply = new double[6] { 0.15, 0.25, 0.1, 0.15, 0.25, 0.1 };
for (int i
= 0; i < n; i++)
{
for
(int j = 0; j < m; j++)
{
expectedValue[i] += Convert.ToInt32(expectedValueMultiply[j] *
Convert.ToDouble(masterValues[i, j]));
}
}
//sort
helper =
-500; //burada her satır
için bulduğumuz değerlerin en büyüğünü alıyoruz.
int
expectedValueDecision = 0;
string
expectedValueDecisionName = " ";
for (int i
= 0; i < n; i++)
{
if
(expectedValue[i] > helper)
{
helper = expectedValue[i];
expectedValueDecision = expectedValue[i];
expectedValueDecisionName = decisionVariable[i];
}
}
//
Expected value of complete information
// tam bilginin beklenen değeri
double
evoci = 0;
c = 0;
l = 0;
counter =
0;
for (l =
0; l < m;)
{
if
(temporaryMasterValues[c, l] == 0)
{
evoci += expectedValueMultiply[l] * Convert.ToDouble(masterValues[c,
l]);
}
counter++;
c++;
if
(counter == 3)
{
counter = 0;
c
= 0;
l++;
}
}
double
realEvoci = evoci - expectedValueDecision;
//Write
the results // artık sonuçları ekrana yazdırıyoruz.
Console.WriteLine(" ************************* MaxiMin
*************************");
Console.WriteLine(" ");
Console.WriteLine("MaxiMin valuse is : " + maxiMin + ".
\t And decision is : " + maxiMinDecisionName);
Console.WriteLine(" ");
Console.WriteLine(" ************************* MaxiMax
*************************");
Console.WriteLine(" ");
Console.WriteLine("MaxiMax value is : " + maxiMax + ". \t
And decision is : " + maxiMaxDecisionName);
Console.WriteLine(" ");
Console.WriteLine(" ************************* Hurwicz
*************************");
Console.WriteLine(" ");
Console.WriteLine("The output of the table obtained based on Hurwicz
criterion is as follows as a result of the examination, the decision value was
: [" + harwicsMax + "]. \t And decision is" +
":" + harwicsDecisionName);
for (int i
= 0; i < n; i++)
{
Console.WriteLine(harwics[i]);
}
Console.WriteLine(" ************************* Laplace
*************************");
Console.WriteLine("The output of the table obtained based on
Laplace criterion as follows as a result of the examination,the decision value
was : [" + laplaceDecision + "]. \t And decision is " +
":" + laplaceDecisionName);
for (int i
= 0; i < n; i++)
{
Console.WriteLine(laplace[i]);
}
Console.WriteLine(" ");
Console.WriteLine(" *************************minMax
*************************");
Console.WriteLine(" ");
Console.WriteLine("You see your table status after minMax progress
under this line ; ");
for (int i
= 0; i < n; i++)
{
for
(int j = 0; j < m; j++)
{
Console.Write(temporaryMasterValues[i, j] + "\t");
}
Console.WriteLine(" ");
}
Console.WriteLine(" ");
Console.WriteLine("And you see
every lines biggest value is under this line ");
Console.WriteLine(" ");
for (int i
= 0; i < n; i++)
{
Console.WriteLine(minMaxsMaxNumber[i]);
}
Console.WriteLine(" ");
Console.WriteLine("And miniMax decision value is : [" +
miniMax + "],miniMax decision is :" + minMaxDecisionName);
Console.WriteLine(" ");
Console.WriteLine("
************************* Expected Value *************************");
Console.WriteLine(" ");
Console.WriteLine("You see your decision and decisions expected
values under this line");
Console.WriteLine(" ");
for (int i
= 0; i < n; i++)
{
Console.WriteLine("[" + decisionVariable[i] + "] :"
+ expectedValue[i]);
}
Console.WriteLine(" ");
Console.WriteLine("And expected values decision value is : ["
+ expectedValueDecision + "],and decision variable is : " +
expectedValueDecisionName);
Console.WriteLine(" ");
Console.WriteLine(" ************************* Expected Value Of
Complete Information *************************");
Console.WriteLine(" ");
Console.WriteLine("Expected value of complete informations is :
" + evoci + " - " + expectedValueDecision + " = " +
realEvoci);
Console.ReadKey();
Console.Clear();
Console.ReadKey();