Математическая модель оптимальной расстановки игроков футбольной команды на поле
Дипломная работа - Менеджмент
Другие дипломы по предмету Менеджмент
dd then begin:=1;Z_a[i]=1 do i:=i+1;:=1;Z_b[j]=0 do j:=j+1;[i,j]:=0;;_b:=dd;;kkk(var ki,kj:integer):integer; // Расчет коэффициента k в свободных клеткахi,j,k,k_min : integer;: boolean;:=true;i:=1 to Na doj:=1 to Nb dop[i,j]=-1 then begin:=c[i,j]-alfa[i]-betta[j];b then begin:=false;:=i; kj:=j; k_min:=k;elsek<k_min then begin_min:=k;:=i; kj:=j;;;:=k_min;;div_mod(c:integer; var a,b:integer); //Перевод одномерного массива в двумерный:=c mod Nb; a:=c div Nb +1;b=0 then begin:=Nb; dec(a);;;Rek(Xi,Yi:integer; var z:boolean; var c:integer); i,j:integer;
Begin //Рекурсивная процедура, определяет контур перемещения
z:=false;c of
: for i:=1 to Na doi-1 then beginu[(i-1)*Nb+Yi]=0 then begin[(Xi-1)*Nb+Yi]:=(i-1)*Nb+Yi;:=2;(i,Yi,z,c);z then exit;;if (i=ki) and (Yi=kj) then begin[(Xi-1)*Nb+Yi]:=(ki-1)*Nb+kj;z=true then z:=false;z=false then z:=true;;;
: for i:=1 to Nb doi-1 then beginu[(Xi-1)*Nb+i]=0 then begin[(Xi-1)*Nb+Yi]:=(Xi-1)*Nb+i;:=1;(Xi,i,z,c);z then exit;;if (Xi=ki) and (i=kj) then begin[(Xi-1)*Nb+Yi]:=(ki-1)*Nb+kj;z=true then z:=false;z=false then z:=true;;;;[(Xi-1)*Nb+Yi]:=0;
c:=c mod 2 +1;;kontur; // процедура определения контура перемещения
var i,j,k,mi,mj,l:integer;:boolean;_m:longint;i:=1 to N*N do u[i]:=0;:=1;(ki,kj,z,l);:=ki; j:=kj;:=u[(i-1)*Nb+j];_mod(k,i,j);:=i; mj:=j; l:=1;:=l+1;:=u[(i-1)*Nb+j];_mod(k,i,j);l mod 2=1 thenp[i,j]<p[mi,mj] then begin:=i; mj:=j;;(i=ki) and (j=kj);:=ki; j:=kj; l:=0;_m:=p[mi,mj];l mod 2=0 then begin(p[i,j],p_m);else begin(p[i,j],p_m);;l=0 then inc(p[i,j]);:=u[(i-1)*Nb+j];_mod(k,i,j);(l);(i=ki) and (j=kj);[mi,mj]:=-1;;
//---------------------- решение ---------------------------------TForm1.N2Click(Sender: TObject);i,j,l,k : Integer;: real;: string;: integer;(alfa); Nul(betta);(A);Nul(B);Nul(B_d);Nul(x);
Na:= 22; Nb:= 8;
// заполняем массив В с учетом вида расстановки
case rg1.ItemIndex of
: begin[1]:= 2; B[2]:= 1; B[3]:= 1; B[4]:= 2;[5]:= 1; B[6]:= 1; B[7]:= 2; B[8]:= 12;;
: begin[1]:= 3; B[2]:= 1; B[3]:= 1; B[4]:= 2;[5]:= 1; B[6]:= 1; B[7]:= 1; B[8]:= 12;;
: begin[1]:= 1; B[2]:= 1; B[3]:= 1; B[4]:= 2;[5]:= 1; B[6]:= 1; B[7]:= 3; B[8]:= 12;;
: begin[1]:= 2; B[2]:= 1; B[3]:= 1; B[4]:= 3;[5]:= 0; B[6]:= 0; B[7]:= 3; B[8]:= 12;;
: begin[1]:= 3; B[2]:= 0; B[3]:= 0; B[4]:=3;[5]:= 1; B[6]:= 1; B[7]:= 2; B[8]:= 12;;
end;
// заполняем массив А - назначение игрока только на 1 место
for i:= 1 to Na do A[i]:= 1;
// заполняем массив стоимостей - оценки игроковi:= 1 to Na do
for j:= 1 to Nb doC[i,j]:= 0;;Form2.SGrid do begini:= 1 to RowCount - 2 do beginj:= 1 to (Nb-1) do C[i,j]:= 10 - StrToInt(Cells[j,i]);;;
// составление опорного планаi:=1 to Nb do B_d[i]:=B[i];i:=1 to Na do beginj:=1 to Nb do x[j]:=j;j:=1 to Nb-1 do begin_min:=c[i,x[j]];_min:=j;r:= j+1 to Nb do(x_min>c[i,x[r]]) or
((x_min=c[i,x[r]]) and (B[x[r]]>b[x[r_min]])) then_min :=c[i,x[r]];_min:=r;;_p:=x[r_min];[r_min]:=x[j];[j]:=x_p;;:=0;j:=1 to Nb do begin[i,x[j]]:=B_d[x[j]];p[i,x[j]]>A[i]-Sp then p[i,x[j]]:=A[i]-Sp;(Sp,p[i,x[j]]);(B_d[x[j]],p[i,x[j]]);;;i:=1 to Na doj:=1 to Nb do if p[i,j]=0 then p[i,j]:=-1;
// рассчитываем потенциалы для опорного планаa_b do;
// постепенное приближение плана к оптимальномуkkk(ki,kj)<0 do begin
kontur;:=Nt+1;a_b then break;
end;
// выводим результаты.Clear;
summa:= 0;.Lines.Add('В нападении:');i:=1 to Na do beginp[i,1]=1 then.Lines.Add('--'+Form2.SGrid.Cells[0,i]);;.Lines.Add('');.Lines.Add('Левый защитник:');i:=1 to Na do beginp[i,2]=1 then.Lines.Add('--'+Form2.SGrid.Cells[0,i]);;.Lines.Add('');
Memo1.Lines.Add('Правый защитник:');
for i:=1 to Na do beginp[i,3]=1 then.Lines.Add('--'+Form2.SGrid.Cells[0,i]);;.Lines.Add('');
Memo1.Lines.Add('Центральный защитник:');
for i:=1 to Na do beginp[i,4]=1 then.Lines.Add('--'+Form2.SGrid.Cells[0,i]);;.Lines.Add('');
Memo1.Lines.Add('Левый полузащитник:');
for i:=1 to Na do beginp[i,5]=1 then.Lines.Add('--'+Form2.SGrid.Cells[0,i]);;.Lines.Add('');
Memo1.Lines.Add('Правый полузащитник:');
for i:=1 to Na do beginp[i,6]=1 then.Lines.Add('--'+Form2.SGrid.Cells[0,i]);;.Lines.Add('');
Memo1.Lines.Add('Центральный полузащитник:');
for i:=1 to Na do beginp[i,7]=1 then.Lines.Add('--'+Form2.SGrid.Cells[0,i]);;.Lines.Add('');i:= 1 to Na doj:= 1 to (Nb-1) do beginp[i,j]=1 then summa:=summa + p[i,j]*(10-c[i,j]);;.Lines.Add('Сумма коэффициентов = '+inttostr(summa));
end;.
Интерфейс автоматизированного программного средства поиска оптимальной расстановки игроков на поле
Рис. 3
Рис. 4