Оптимизация многомерной нелинейной функции. Слепой поиск
Приложение
Листинг программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin, Grids, Buttons, Menus;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: T
Label;
ComboBox1: TComboBox;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
ComboBox2: TComboBox;
Label10: TLabel;
Label11: TLabel;
ComboBox3: TComboBox;
Label12: TLabel;
Label13: TLabel;
GroupBox2: TGroupBox;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Label18: TLabel;
Label19: TLabel;
Label20: TLabel;
Label21: TLabel;
GroupBox3: TGroupBox;
SpinEdit9: TSpinEdit;
StringGrid1: TStringGrid;
GroupBox4: TGroupBox;
Label22: TLabel;
Label23: TLabel;
Label24: TLabel;
Label25: TLabel;
GroupBox5: TGroupBox;
SpinEdit10: TSpinEdit;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
Edit10: TEdit;
Edit11: TEdit;
MainMenu1: TMainMenu;
File1: TMenuItem;
Close1: TMenuItem;
N1: TMenuItem;
Label26: TLabel;
GroupBox6: TGroupBox;
SpeedButton1: TSpeedButton;
procedure FormCreate (Sender: TObject);
procedure SpeedButton1Click (Sender: TObject);
procedure Close1Click (Sender: TObject);
procedure N1Click (Sender: TObject);
private
{Private declarations}
public
{Public declarations}
end;
var
Form1: TForm1;
implementation
uses Math, Unit2;
{$R *.dfm}
procedure TForm1. FormCreate (Sender: TObject);
begin
// задаём названия заголовков грайда
StringGrid1. Cols[0].Text:='№ итер.';
StringGrid1. Cols[1].Text:='X1';
StringGrid1. Cols[2].Text:='X2';
StringGrid1. Cols[3].Text:='Значение функции';
StringGrid1. Cols[4].Text:='Попытка';
end;
procedure TForm1. SpeedButton1Click (Sender: TObject);
var I: Integer;
A, B, C, D, x11, x12, x21, x22, x1, x2, x1opt, x2opt, y, Yopt:real;
begin
// присваиваем для удобства значения переменных
A:=StrToFloat (Edit1. Text);
B:=StrToFloat (Edit2. Text);
C:=StrToFloat (Edit3. Text);
D:=StrToFloat (Edit4. Text);
x11:=StrToFloat (Edit5. Text);
x12:=StrToFloat (Edit6. Text);
x21:=StrToFloat (Edit7. Text);
x22:=StrToFloat (Edit8. Text);
// создаем в грайде строки
StringGrid1. RowCount:=SpinEdit9. Value+1;
for I:=1 to SpinEdit9. Value do
BEGIN
// получение случайных значений координат точки
{**************************************}
randomize;
x1:= (x12 – x11) *random+ x11;
x2:= (x22 – x21) *random+ x21;
{**************************************}
// вычисляем значение функции
if (ComboBox1. Text='-') and (ComboBox2. Text='-') and (ComboBox3. Text='-')
then
y:=A*(x1*x1*x1) – B*(x2*x2) – C*x1 – D*x2;
if (ComboBox1. Text='-') and (ComboBox2. Text='-') and (ComboBox3. Text='+')
then
y:=A*(x1*x1*x1) – B*(x2*x2) – C*x1 + D*x2;
if (ComboBox1. Text='-') and (ComboBox2. Text='+') and (ComboBox3. Text='-')
then
y:=A*(x1*x1*x1) – B*(x2*x2) + C*x1 – D*x2;
if (ComboBox1. Text='+') and (ComboBox2. Text='-') and (ComboBox3. Text='-')
then
y:=A*(x1*x1*x1) + B*(x2*x2) – C*x1 – D*x2;
if (ComboBox1. Text='+') and (ComboBox2. Text='+') and (ComboBox3. Text='-')
then
y:=A*(x1*x1*x1) + B*(x2*x2) + C*x1 – D*x2;
if (ComboBox1. Text='-') and (ComboBox2. Text='+') and (ComboBox3. Text='+')
then
y:=A*(x1*x1*x1) – B*(x2*x2) + C*x1 + D*x2;
if (ComboBox1. Text='+') and (ComboBox2. Text='+') and (ComboBox3. Text='+')
then
y:=A*(x1*x1*x1) + B*(x2*x2) + C*x1 + D*x2;
if (ComboBox1. Text='+') and (ComboBox2. Text='-') and (ComboBox3. Text='+')
then
y:=A*(x1*x1*x1) + B*(x2*x2) – C*x1 + D*x2;
// проверка номера итерации
if i=1 then
begin
x1opt:=x1;
x2opt:=x2;
Yopt:=y;
end
else
begin
if Yopt>y then
// выбираем следуещее более оптимальное значение
begin
x1opt:=x1;
x2opt:=x2;
Yopt:=y;
StringGrid1. Cells [4, i]:='УДАЧНАЯ';
end
else StringGrid1. Cells [4, i]:='неудачная';
end;
// добавляем данные в грайд
StringGrid1. Cells [0, i]:=inttostr(i);
StringGrid1. Cells [1, i]:=FloatToStrF (x1, ffFixed, 15, SpinEdit10. Value);
StringGrid1. Cells [2, i]:=FloatToStrF (x2, ffFixed, 15, SpinEdit10. Value);
StringGrid1. Cells [3, i]:=FloatToStrF (y, ffFixed, 15, SpinEdit10. Value);
END;
Edit9. Text:=FloatToStrF (x1opt, ffFixed, 15, SpinEdit10. Value);
Edit10. Text:=FloatToStrF (x2opt, ffFixed, 15, SpinEdit10. Value);
Edit11. Text:=FloatToStrF (Yopt, ffFixed, 15, SpinEdit10. Value);
end;
procedure TForm1. Close1Click (Sender: TObject);
begin
close;
end;
procedure TForm1.N1Click (Sender: TObject);
begin
Beep;
// показываем модально какое-нибудь окно о проге
form2. ShowModal;
end;
end.
Другие рефераты на тему «Программирование, компьютеры и кибернетика»:
Поиск рефератов
Последние рефераты раздела
- Основные этапы объектно-ориентированного проектирования
- Основные структуры языка Java
- Основные принципы разработки графического пользовательского интерфейса
- Основы дискретной математики
- Программное обеспечение системы принятия решений адаптивного робота
- Программное обеспечение
- Проблемы сохранности информации в процессе предпринимательской деятельности