Laboratoriya ishi №4



Download 168,09 Kb.
bet3/3
Sana25.03.2022
Hajmi168,09 Kb.
#510438
1   2   3
Bog'liq
4-laboratoriya ishi mavzu Chiziqli dasturlash masalalarining ma

1-jadval

Bazis o’zgaruvchilar

Ozod hadlar

x1

x2

x3

x4

x3

1

1

2

1

0

x4

1

2

1

0

1

F

0

-2

-3

0

0

Bizda qo’yilgan masalaning eng katta qiymati izlanayotgani uchun, 1-jadval oxirgi yo’l elementlarining ichidan eng kichik manfiy son -3 ni olamiz (agar qo’yilgan masakaning eng kichik qiymati izlanayotgan bo’lsa, u holda oxirgi yo’l elementlari ichidan eng kichik musbat son olingan bo’lar edi). Bu -3 turgan ustun hal qiluvchi ustun bo’ladi. Endi ozod had elementlarini mos ravishda hal qiluvchi manfiy bo’lmagan ustun elementlariga bo’lib, ularning eng kichigini olamiz:


.
2 turgan yo’l hal qiluvchi yo’l, 2 ning o’zi esa hal qiluvchi element bo’ladi.
Endi hal qiluvchi elementni 1 ga aylantirib olamiz: buning uchun hal qiluvchi yo’l elementlarini 2 ga bo’lamiz:

Bazis o’zgaruvchilar

Ozod hadlar

x1

x2

x3

x4

x3

1/2

1/2

1

1/2

0

x4

1

2

1

0

1

F

0

-2

-3

0

0

Endi hal qiluvchi ustun elementlarini hal qiluvchi elementdan tashqarisini nolga aylantiramiz: ikkinchi simpleks jadvalini tuzish uchun birinchi yo’l elementlarini -1 ga ko’paytirib, ikkinchi yo’l elementlariga, so’ngra 3 ga ko’paytirib, uchinchi yo’l elementlariga qo’shamiz.


Hal qiluvchi element, bazis noma’lum x3 turgan yo’l va ozod noma’lum x2 turgan ustunning kesishish joyida turgani uchun, bazis o’zgaruvchi x3 ning o’rniga x2 olsak, natijada bazis o’zgaruvchilar x2, x4 bo’ladi.
2-jadval

Bazis o’zgaruvchilar

Ozod hadlar

x1

x2

x3

x4

x2

1/2

1/2

1

1/2

0

x4

1/2

3/2

0

-1/2

1

F

3/2

-1/2

0

3/2

0

Ikkinchi simpleks jadvalidan ko’rinadiki, ikkinchi bazis yechim


, , ,
bo’lib, maqsad funksiyamiz esa

ko’rinishda bo’ladi. Bundan ko’rinadiki, maqsad funksiyaning qiymatini x1 hisobiga oshirish mumkin. Ikkinchi jadvalga e’tibor bersak, F turgan yo’lda manfiy son faqat bitta . Shuning uchun, bu turgan ustun hal qiluvchi ustun bo’ladi. Hal qiluvchi elementni esa avvalgicha aniqlaymiz:
.
Demak, turgan yo’l hal qiluvchi yo’l bo’lib, ning o’zi esa hal qiluvchi element bo’ladi.
Bazis o’zgaruvchi x4 ning o’rniga esa x1 o’tadi. Avvalgidek hal qiluvchi elementni 1 ga aylantirib olib, so’ngra hal qiluvchi ustun elementlarini (hal qiluvchi elementdan tashqari) nolga aylantirib, 3-simpleks jadvalini tuzamiz: ikkinchi yo’l elementlarini ga ko’paytirib, birinchi yo’l elementlariga, so’ngra ga ko’paytirib, uchinchi yo’l elementlariga qo’shamiz.

Bazis o’zgaruvchilar

Ozod hadlar

x1

x2

x3

x4

x2

1/2

1/2

1

1/2

0

x1

1/3

1

0

-1/3

2/3

F

3/2

-1/2

0

3/2

0


3-jadval

Bazis o’zgaruvchilar

Ozod hadlar

x1

x2

x3

x4

x2

1/3

0

1

2/3

-1/3

x1

1/3

1

0

-1/3

2/3

F

5/3

0

0

4/3

1/3

3-simpleks jadvalining oxirgi yo’lida manfiy elementlar yo’q, shuning uchun maqsad funksiyaning qiymatini oshirish mumkin emas. Demak, qo’yilgan masalaning yechimi , bo’lib, bo’ladi.


Dastur:
#include
#include
#include
//Rustamov Olimjon 210-19
using namespace std;

#define MAX_ROWS 11


#define MAX_COLS 32

int rows;


int cols;
int bas[MAX_ROWS];
double mat[MAX_ROWS][MAX_COLS];

bool InputSize();


void InputMatrix();
void InputFunction();
void SetIndexString();
void Show();
bool CheckIsComp();
int FindMasterCol();
void ShowResult();
int FindRow(int col);
void Gauss(int col, int row);

int main(){


if (!InputSize()){
cout<<"Invalid sizes!";
cin.get();
return 0;
}
InputMatrix();
InputFunction();
SetIndexString();
Show();
while (true){
if (!CheckIsComp()){
cout<break;
}
int col=FindMasterCol();
if (!col){
cout<ShowResult();
break;
}
int row=FindRow(col);
Gauss(col,row);
Show();
};
return 0;
}

bool InputSize(){


int c=MAX_ROWS-2;
cout<<"Number of equations: ";
cin>>rows;
if (rows>c) return false;
c=MAX_COLS-2-c;
cout<<"Number of variables: ";
cin>>cols;
return cols <= c;
}

void InputMatrix(){


for (int i=1; i<=rows; i++){
for (int j=2; j<=cols+2; j++){
if (j == cols+2){
cout<<"Enter equation-"<else if (i==rows+1) cout<else cout<for(int j=1; j<=cols+1; j++){
if (i==0){
if (j==1) cout<else cout<}
else{
cout<}

bool CheckIsComp(){


for (int j=2; j<=cols+1; j++){
if (mat[rows+1][j]<0){
bool is=false;
for (int i=1; i<=rows; i++) is |= mat[i][j]>=0;
if (!is) return false; }
}
return true;
}

int FindMasterCol(){


int col;
int count=0;
for (int i=1; i<=cols; i++) if (mat[rows+1][i+1]>=0) count++;
if (count == cols) return 0;
double min=0;
for (int i=1; i<=cols; i++) if (mat[rows+1][i+1]<=min){min=mat[rows+1][i+1]; col=i;}
return col;
}

void ShowResult(){


cout<for (int i=1; i<=rows; i++){
cout<if (i!=rows) cout<<", ";
}
cout<<")\nF(x) = "<}

int FindRow(int col){


bool ok=false;
int row;
double min_row;
for (int i=1; i<=rows; i++) if (mat[i][col+1]>0) {ok=true; min_row=mat[i][1]/mat[i][col+1]; row = i; break;}
if (!ok) return 0;
for (int i=1; i<=rows; i++){
if (mat[i][col+1] > 0){
double a=mat[i][1]/mat[i][col+1];
if (amin_row=a;
row=i;}}
}
return row;
}

void Gauss(int col, int row){


for (int i=row+1; i<=rows+1; i++){
double min_one=-1;
double mnog=min_one*mat[i][col+1]/mat[row][col+1];
for (int j=1; j<=cols+1; j++) mat[i][j]=mat[i][j]+mat[row][j]*mnog;
}
for (int i=row-1; i>=1; i--){
double min_one(-1);
double mnog=min_one*mat[i][col+1]/mat[row][col+1];
for (int j=1; j<=cols+1; j++) mat[i][j]=mat[i][j]+mat[row][j]*mnog;
}
double del=mat[row][col+1];
for (int j=1; j<=cols+1; j++) mat[row][j]=mat[row][j]/del;
bas[row]=col;
}
Natija:


XULOSA
Xulosa qilib shuni aytish mumkinki, simpleks usuli algoritmi juda qiziq va dasturlashning umumiy tomonlarini qamrab olgan ekan. Simpleks usuli bo’yicha bir nechta jadvallar hosil qilinadi. Ana shu jadvallarda simpleks usuli uchun kerakli ma’lumotlar kiritiladi.
Chiziqli dasturlashning asosiy masalasini geometrik usulda yechganda tenglamalar sistemasiga va maqsad funksiyasiga kiruvchi o’zgaruvchilar soni qancha kam bo’lsa, masalani yechish shuncha osonlashadi. Agar o’zgaruvchilar soni juda ko’p bo’lsa, masalan qavariq shakl uchlarining soni bir necha million bo’lsa, u holda maqsad funksiyasining eng katta (eng kichik) qiymatlarini topish hozirgi zamon hisoblash mashinalariga ham o’g’irlik qiladi.
Shu kabi, ko’p o’zgaruvchili chiziqli dasturlash masalalarini yechish uchun maxsus usullar ishlab chiqish lozimki, ko’pyoqning uchlarini tanlash tartibsiz emas, balki maqsadli ravishda amalga oshirilsin. Chiziqli dasturlashning shu ko’rinishdagi masalalarini yechish uchun maxsus analitik usul – simpleks usuli yaratilgan.

Download 168,09 Kb.

Do'stlaringiz bilan baham:
1   2   3




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish