Гэж юу вэ?
Компьютер симуляци гэдэг үгийг хүмүүс сонсвол хэтэрхий хүндээр бодож магадгүй. Угаас хэрэглээнд маш цогцоор том системүүдэд ашигладаг тул тэр нь ч аргагүй. Гэвч угтаа яаж бодит ертөнц дээрх зүйлийг компьютероор бодуулах вэ? л гэдэг асуудал.

Симуляци буюу загварчлал нь “Бодит үйл ажиллагаа, үр дүнг урьдчилан таамаглахад зориулагдсан компьютер дээр хийгдэх математик загварчлалын үйл явц юм”. Жишээ нь: Хүн амын өсөлтийг харуулахын тулд бидэнд төрөлт, нас баралтыг нь тооцоолох математик магадлалын томьёо байхад л болно. Аливаа зүйлийг загварчлах нь дараах дөрвөн алхмаар бүрдэнэ.
- Ажиглалт
Бодит амьдрал дээрх тухайн зүйлээ ажиглах. - Таамаглал
Хэрхэн ажиллаж буйг таамаглан томьёолно. - Шалгалт
Математик эсвэл логик ашиглан тухайн үйл явдлыг хэрхэн ажиллаж буйг батлах гэж оролдоно. - Туршилт
Өөрсдийн гаргасан таамаглалыг зөв эсэхийг туршилт явуулан шалгана.
Хэрхэн?
Загварчлал нь ойлгоход төвөгтэй боловч нэг учраа олчихвол хөөрхөн сэдэв. Нэгэн жишээн дээр тайлбарлая. Бид вектор хэрхэн бодохыг биш загварчлал гаргахыг сурах гэж байгаа тул вектор мэддэггүй бол гүйлгээд л хараарай.
Даалгавар: Муур хулгана хоёр байна. Тус бүр 12 болон 8 нэгж хурдтай гэж үзье. Хулгана 10 минутад үүрэндээ орж аврагдана. Эсвэл муур хулганыг барина. Одоо энэхүү үйлдлийг загварчилъя.
Уламжлалт математик физикээс ялгаатай нь бидэнд байршил буюу зай нь мэдэгдэхгүй байна. Учир нь бүх нөхцөлд буюу муур хулгана хоёр ямар ч байрлалд байсан Муур түрүүлж идэх үү? Хулгана зугтах уу? гэдгийг олдог загвар хэрэгтэй. Эхлээд үндсэн математик загвараа гаргахын тулд тодорхой утгаас хөөж гаргах болно.
Бодолт:

Дээр дурдсанчлан эхний алхам нь бодит үйл ажиллагаагаа ажиглах үе шат. Үүний үр дүнг тооцоолон бид таамаглалаа гаргах болно. Муур(5 ,0) Хулгана(0, 10) гэсэн байрлалуудад байна. Хавтгай дээрх хөдөлгөөн тулд мэдээж вектороор бодно.
Алхам 1: M→X векторыг тодорхойлох
M (5,0); X (0, 10) гэсэн цэгүүд өгөгдсөн тул M→X вектор нь: M→X = (0−5,10−0) = (−5,10)
Энэ нь векторын координат (−5,10) байна.
Алхам 2: Векторын нэгж уртыг тодорхойлох
Векторын уртыг олъё: Язгуур дор sqrt (**∣M→X∣ = (−5)2+(10)2=25+100=125**) 125 язгуураас гаргаад 5 язгуур дор 5. sqrt (125) = 5 sqrt (5)
Вектор буюу (-5, 10) гэсэн чиглэлийн дагуу 1 нэгж явахад (-5, 10) * 5 sqrt (5) зай туулна гэсэн үг.
Нэгж вектор буюу Z тухайн чиглэлийн дагуу 1 нэгж явахад хэдий зай туулах нь.
(− sqrt (5)/5, 2 sqrt (5)/5)
Алхам 3: M ба X цэгүүдийн хөдөлгөөн
- M цэгийн хөдөлгөөн: M→X чиглэлд 12 нэгж урагшилна.
M′ = (5, 0) Анхны байрлал + 12 Хурд × Z = (5, 0) + 12 × Z - X цэгийн хөдөлгөөн: M→X чиглэлд 8 нэгж урагшилна.
X′ = (0,10) Анхны байрлал + 8 Хурд × Z = (0, 10) + 8 × Z
M цэгийн хөдөлгөөн
M′ = [5 − (12 sqrt (5)/5), 0 + 24 sqrt (5)/5] = [5 − 12 sqrt (5)/5, 24 sqrt (5)/5]
X цэгийн хөдөлгөөн
X′ = [0 − (8 sqrt (5)/5], 10 + [16 sqrt (5)/5)] = [− 8 sqrt (5)/5, 10 + (16 sqrt (5)/5)]
Алхам 4: 10 нэгжийн дараа хаана очих
Муур = Анхны байрлал + 10(удаа) * M цэгийн хөдөлгөөн
Хулгана мөн адил.
Хулгана = Анхны байрлал + 10(удаа) * M цэгийн хөдөлгөөн
Ийнхүү хариуд нь Муур (−48.66, 107.33), Хулгана (−35.78, 81.55) гэсэн байршлуудад очсон байна. Муурын байрлал хулганыг өнгөрсөн байгаа тул хулгана зугтааж чадалгүй идүүлсэн болж таарах нь. Харин яг хэдий агшин баригдсан гэдгийг нь харахын тулд шууд 10-р биш тус бүрд нь байршлыг олж бага багаар нэмээд явахад л болно.
Математик загвар
Дээрх бодлогын бодолт нь бидний 2-р шат буюу таамаглал. Ашигласан томьёонууд нь бидний симуляци гаргахад хэрэглэх математик загварчлал болно. Дээрх бодлогод ашиглагдсан томьёог гаргавал:
Зайг олох:
DIST(t) = √[Y1(t)−Y2(t)]^2 +[X1(t)−X2(t)]^2
Шинэ байршлыг олох:
X2(t+1) = X2(t) + V2 * [X1(t)+ X2(t)]/DIST(t)
Y2(t+1) = Y2(t) + V2 * [Y1(t)+ Y2(t)]/DIST(t)
Компьютер загвар
Дээрх математик загвараа урсгалын диаграмм болгох нь Компьютер загвар юм.

Энэхүү диаграмм дээр эхний нөхцөл шалгаж байгаа хэсэгт Зай >= 1 гэж шалгасан байгаа. Бид ашиглаж байгаа томьёогоо сайн мэддэг байж компьютерт ашиглах болно.
import math
import random
def get_random_position_range(x_range, y_range):
x = random.uniform(x_range[0], x_range[1])
y = random.uniform(y_range[0], y_range[1])
return (x, y)
def simulate_hunt(initial_positions, speeds, max_time, delta_t=0.01):
x_m, y_m = initial_positions['mouse']
x_s, y_s = initial_positions['cat']
v_m, v_c = speeds['mouse'], speeds['cat']
time = 0
while time <= max_time:
# 1. Хулгана могойноос эсрэг зүгт хөдөлнө
dx_m = x_m - x_s
dy_m = y_m - y_s
distance_m = math.hypot(dx_m, dy_m)
x_m += v_m * delta_t * (dx_m / distance_m)
y_m += v_m * delta_t * (dy_m / distance_m)
# 2. Могой хулгана руу хөдөлнө
dx_s = x_m - x_s
dy_s = y_m - y_s
distance_s = math.hypot(dx_s, dy_s)
if distance_s <= 1:
return f"Могой хулганыг {time:.2f} цагийн дотор барилаа."
if distance_s > 0:
x_s += v_c * delta_t * (dx_s / distance_s)
y_s += v_c * delta_t * (dy_s / distance_s)
time += delta_t
return "Хулгана үүрэндээ орлоо."
position_m = get_random_position_range((0, 500), (0, 300))
position_c = get_random_position_range((0, 500), (0, 300))
# Анхны өгөгдөл
initial_positions = {
'mouse': position_m,
'cat': position_c,
}
speeds = {
'mouse': 8,
'cat': 12,
}
maxtime = 100
# Симуляци хийх
result = simulate_hunt(initial_positions, speeds, maxtime)
print(result)
Одоо бидэнд хоёр зүйл л үлдсэн. Кодоо ажиллуулаад шалгах(3), анхны утгуудыг сольж турших(4). Эдгээр алхмыг та нарт үлдээе.
Дүгнэлт
Ямар ч үйл ажиллагаа байсан загварчилж болдог. Хамгийн том жишээ нь мэдээж тоглоом юм. Гэхдээ загварчлалыг маш олон салбарт, ялангуяа тооцоолол гаргахад ашигладаг. Дараагийн хэсэгт өөр жишээн дэлгэрэнгүй тайлбарлах болно.