ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ рСализация симплСкс-ΠΌΠ΅Ρ‚ΠΎΠ΄Π°

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π’ Π°Π²Ρ‚оматичСском Ρ€Π΅ΠΆΠΈΠΌΠ΅ (ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1, рис.2) Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ осущСствляСтся Π² ΠΎΠ΄Π½ΠΎ дСйствиС Π±Π΅Π· участия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ обучСния (ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1, рис.3) Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ выполняСтся пошагово с ΠΏΡ€ΠΈΠ²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ участия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ осущСствляСт Π²Ρ‹Π±ΠΎΡ€ Π²Π΅Π΄ΡƒΡ‰Π΅Π³ΠΎ столбца, Π·Π°Ρ‚Π΅ΠΌ Π²Π΅Π΄ΡƒΡ‰Π΅ΠΉ строки, послС Ρ‡Π΅Π³ΠΎ симплСкс Ρ‚Π°Π±Π»ΠΈΡ†Π° пСрСстраиваСтся ΠΈ ΠΈΡ‚Срация повторяСтся. ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ симплСкс… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ рСализация симплСкс-ΠΌΠ΅Ρ‚ΠΎΠ΄Π° (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

1. ОписаниС Π·Π°Π΄Π°Ρ‡ΠΈ

2. ОписаниС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

3. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ интСрфСйса

4. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ модуля

5. ВСстированиС Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Бписок использованной Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… срСдств ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ прилоТСния ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 2. Листинг класса SimplexSolve

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π›ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ — матСматичСская дисциплина, посвящСнная Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΡΠΊΡΡ‚Ρ€Π΅ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π°Ρ… n-ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ пространства, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… систСмами Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ ΠΈ Π½Π΅Ρ€Π°Π²Π΅Π½ΡΡ‚Π².

Π›ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ являСтся частным случаСм Π²Ρ‹ΠΏΡƒΠΊΠ»ΠΎΠ³ΠΎ программирования, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² ΡΠ²ΠΎΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ являСтся частным случаСм матСматичСского программирования. Π’Π΅Ρ€ΠΌΠΈΠ½ «ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅» Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π² ΡΠΌΡ‹ΡΠ»Π΅ «ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ». Он Π±Ρ‹Π» ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ Π² ΡΠ΅Ρ€Π΅Π΄ΠΈΠ½Π΅ 1940;Ρ… Π³ΠΎΠ΄ΠΎΠ² Π”ΠΆΠΎΡ€Π΄ΠΆΠ΅ΠΌ Π”Π°Π½Ρ†ΠΈΠ³ΠΎΠΌ, ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ программирования, Π΅Ρ‰Ρ‘ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ Π±Ρ‹Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π Π°Π±ΠΎΡ‚Π° посвящСна Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнному ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ программирования — симплСкс-ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ. БимплСкс-ΠΌΠ΅Ρ‚ΠΎΠ΄ являСтся классичСским ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΡ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π² Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.

1. ОписаниС Π·Π°Π΄Π°Ρ‡ΠΈ Π—Π°Π΄Π°Ρ‡Π° Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ программирования (Π›ΠŸ) Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΈΠ· Π½Π΅ΠΎΠ±Ρ…одимости ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ рСсурсы. Π­Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ, связанныС с Ρ†Π΅Π»Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ Ρ†Π΅Π»Π΅ΠΉ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ; Π·Π°Π΄Π°Ρ‡ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ»ΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΡ структур (производствСнных структур прСдприятий, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… структур объСдинСний); Π·Π°Π΄Π°Ρ‡ΠΈ проСктирования (ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ слоТных робототСхничСских комплСксов, Π³ΠΈΠ±ΠΊΠΈΡ… производствСнных систСм).

Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π·Π°Π΄Π°Ρ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ относятся ΠΊ ΠΎΠ±Π»Π°ΡΡ‚ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ программирования, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡ‹Ρ€ΡŒΡ, Π·Π°Π΄Π°Ρ‡Ρƒ ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠΈ мощностСй, Π·Π°Π΄Π°Ρ‡Ρƒ Π½Π° ΡΠΎΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ производствСнной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π—Π°Π΄Π°Ρ‡Π° Π›ΠŸ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΎΡ‚ыскании Π²Π΅ΠΊΡ‚ΠΎΡ€Π°, ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ/ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Π»ΠΈΠ½Π΅ΠΉΠ½ΡƒΡŽ Ρ†Π΅Π»Π΅Π²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

(1)

ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… ограничСниях

(2)

(3)

Π—Π°ΠΏΠΈΡΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ Π›ΠŸ Π² Π²ΠΈΠ΄Π΅ (1)-(3) называСтся Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ.

Π­Ρ‚Ρƒ ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡Ρƒ Π›ΠŸ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎ-ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠΉ записи:

(4)

Π³Π΄Π΅ — Π²Π΅ΠΊΡ‚ΠΎΡ€ коэффициСнтов Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ,

— Π²Π΅ΠΊΡ‚ΠΎΡ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ,

— Π²Π΅ΠΊΡ‚ΠΎΡ€ свободных Ρ‡Π»Π΅Π½ΠΎΠ²,

— ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° коэффициСнтов.

ΠžΠ±Π»Π°ΡΡ‚ΡŒ называСтся ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ допустимых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (ΠžΠ”Π—) Π·Π°Π΄Π°Ρ‡ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ программирования. Π‘ΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ (2), (3) Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ систСмами ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ Π›ΠŸ. Π’Π°ΠΊ ΠΊΠ°ΠΊ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

РСшСниСм Π·Π°Π΄Π°Ρ‡ΠΈ Π›ΠŸ, ΠΈΠ»ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ»Π°Π½ΠΎΠΌ, называСтся Π²Π΅ΠΊΡ‚ΠΎΡ€, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠΉ систСмС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ†Π΅Π»Π΅Π²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

Другая Ρ„ΠΎΡ€ΠΌΠ° прСдставлСния Π·Π°Π΄Π°Ρ‡ΠΈ Π›ΠŸ — каноничСская. Она ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

Π’ ΠΊΠ°Π½ΠΎΠ½ΠΈΡ‡Π΅ΡΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ записи Π·Π°Π΄Π°Ρ‡ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ программирования всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, входящиС Π² ΡΠΈΡΡ‚Π΅ΠΌΡƒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Π° Π²ΡΠ΅ ограничСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ прСдставлСны равСнствами. Π›ΡŽΠ±ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ программирования ΠΌΠΎΠΆΠ½ΠΎ свСсти ΠΊ Π·Π°Π΄Π°Ρ‡Π΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ программирования Π² ΠΊΠ°Π½ΠΎΠ½ΠΈΡ‡Π΅ΡΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅. Для этого Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΌΠ΅Ρ‚ΡŒ ΡΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ максимизации ΠΊ Π·Π°Π΄Π°Ρ‡Π΅ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ; ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ нСравСнств ΠΊ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡΠΌ равСнств ΠΈ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½ΡΡŽΡ‚ся ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

2. ОписаниС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ БимплСкс-ΠΌΠ΅Ρ‚ΠΎΠ΄ являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнным Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π»ΡŽΠ±Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Π›ΠŸ ΠΊΠ°ΠΊ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Ρ‚Π°ΠΊ ΠΈ Ρ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π­Π’Πœ.

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ позволяСт ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ допустимого Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ значСния Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‚. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ находят Π·Π° ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ число шагов. Алгоритм симплСкс-ΠΌΠ΅Ρ‚ΠΎΠ΄Π° позволяСт Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ являСтся Π»ΠΈ Π·Π°Π΄Π°Ρ‡Π° Π›ΠŸ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌΠΎΠΉ.

Рассмотрим Π·Π°Π΄Π°Ρ‡Ρƒ Π›ΠŸ Π² ΠΊΠ°Π½ΠΎΠ½ΠΈΡ‡Π΅ΡΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅. Π‘ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΊΠ°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ (6), (7), (8).

(6)

(7)

(8)

0. ПолоТим k = 1. Взяв ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π·Π° ΡΠ²ΠΎΠ±ΠΎΠ΄Π½Ρ‹Π΅ ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΠ² ΠΈΡ… Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ Π½ΡƒΠ»ΡŽ, Π°, ΠΏΠ΅Ρ€Π΅ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΠ² Π² , — Π·Π° Π±Π°Π·ΠΈΡΠ½Ρ‹Π΅, Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΊΡ€Π°ΠΉΠ½ΡŽΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ:

.

1. Π—Π°ΠΏΠΎΠ»Π½ΠΈΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΡƒΡŽ симплСкс-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ

Π³Π΄Π΅ — Π²Π΅ΠΊΡ‚ΠΎΡ€ коэффициСнтов Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ,

— Π²Π΅ΠΊΡ‚ΠΎΡ€ свободных Ρ‡Π»Π΅Π½ΠΎΠ²,

— ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° коэффициСнтов.

2. Если для k-Ρ‚ΠΎΠΉ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ всС, Ρ‚ΠΎ ΡΡ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ° ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Π°Ρ, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° ΠΏΡƒΠ½ΠΊΡ‚ 7.

Π’ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ 3.

3. Находим Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ столбСц. ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ Π²Ρ‹Π±ΠΎΡ€Π°: Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ столбСц, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ самый ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ коэффициСнт срСди ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ…:

4. Находим Π²Π΅Π΄ΡƒΡ‰ΡƒΡŽ строку ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ:

Если всС элСмСнты Π²Π΅Π΄ΡƒΡ‰Π΅Π³ΠΎ столбца, Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π° Π›ΠŸ Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌΠΎΠΉ, Ρ‚.ΠΊ. цСлСвая функция Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅ допустимых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° ΠΏΡƒΠ½ΠΊΡ‚ 7.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ элСмСнт .

5. ВыполняСм ΠΎΠ΄ΠΈΠ½ шаг ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Гаусса: Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ ΠΈΠ· Ρ‡ΠΈΡΠ»Π° базисных, Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ Π²Π²ΠΎΠ΄ΠΈΠΌ Π² Π±Π°Π·ΠΈΡ. НовыС элСмСнты Π²Π΅Π΄ΡƒΡ‰Π΅ΠΉ строки находятся ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅:

НовыС значСния элСмСнтов ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… строк ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹:

ВсС элСмСнты Π² Π²Π΅Π΄ΡƒΡ‰Π΅ΠΌ столбцС Ρ€Π°Π²Π½Ρ‹ 0, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ сам Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ элСмСнт Ρ€Π°Π²Π΅Π½ 1.

6. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ (k + 1) ΠΊΡ€Π°ΠΉΠ½ΡŽΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ. Полагая k = k + 1, пСрСстраиваСм симплСкс-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ 2.

7. ΠšΠΎΠ½Π΅Ρ† Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

3. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ интСрфСйса Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ простой ΠΎΠ΄Π½ΠΎΠΎΠΊΠΎΠ½Π½Ρ‹ΠΉ интСрфСйс с Π½Π°Π±ΠΎΡ€ΠΎΠΌ всСх Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… инструмСнтов для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ.

Π’Π²Π΅Ρ€Ρ…Ρƒ ΠΎΠΊΠ½Π° стандартно располагаСтся строка мСню (JMenu), содСрТащая подмСню (JSubMenu) Π€Π°ΠΉΠ», Π Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π‘ΠΏΡ€Π°Π²ΠΊΠ°. Π’ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡŽ Π€Π°ΠΉΠ» доступны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ мСню (JMenuItem): ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ», Π’Ρ‹Ρ…ΠΎΠ΄. Π’ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡŽ Π Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π“Ρ€ΡƒΠΏΠΏΡ‹ Ρ€Π°Π΄ΠΈΠΎΠΊΠ½ΠΎΠΏΠΎΠΊ (JRadioButton Group) осущСствляСтся Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π±ΠΎΡ€ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π΄Π²ΡƒΡ… Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹: автоматичСский, Ρ€Π΅ΠΆΠΈΠΌ обучСния. Из ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡŽ Π‘ΠΏΡ€Π°Π²ΠΊΠ° доступСн Π²Ρ‹Π·ΠΎΠ² ΠΎΠΊΠ½Π° «Πž ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅» (SimplexAboutBox).

Под строкой мСню располагаСтся панСль инструмСнтов, Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, доступныС ΠΈΠ· ΡΡ‚Ρ€ΠΎΠΊΠΈ мСню, Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ΅ использованиС ΠΈ Π±Ρ‹ΡΡ‚Ρ€Ρ‹ΠΉ доступ ΠΊ Π½ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ. Она содСрТит ΠΊΠ½ΠΎΠΏΠΊΡƒ (JButton) «Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»», Π° Ρ‚Π°ΠΊΠΆΠ΅ список (JComboBox) для Π²Ρ‹Π±ΠΎΡ€Π° Ρ€Π΅ΠΆΠΈΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹.

Π”Π°Π»Π΅Π΅ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ ΠΏΠ°Π½Π΅Π»ΠΈ (JPanel), ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ€Π΅ΡˆΠ°Π΅ΠΌΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:

Β· ПанСль ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ количСство свободных ΠΈ Π±Π°Π·ΠΈΡΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JLabel.

Β· ПанСль «Π¦Π΅Π»Π΅Π²Π°Ρ функция» ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π²ΠΈΠ΄ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³Ρ€ΡƒΠΏΠΏΡ‹ надписСй (JLabel) ΠΈ Ρ‚Скстовых ΠΏΠΎΠ»Π΅ΠΉ (JTextField).

Β· ПанСль «Π Π΅ΡˆΠ΅Π½ΠΈΠ΅» ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π²Π΅ΠΊΡ‚ΠΎΡ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ шагС выполнСния Π·Π°Π΄Π°Ρ‡ΠΈ (для автоматичСского Ρ€Π΅ΠΆΠΈΠΌΠ° — ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅).

Π’ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ части ΠΎΠΊΠ½Π° располоТСна Ρ‚Π°Π±Π»ΠΈΡ†Π° (JTable), ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰Π°Ρ симплСкс-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ шагС, ΠΈ Π½Π°Π±ΠΎΡ€ ΠΊΠ½ΠΎΠΏΠΎΠΊ (JButton) для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ:

Π’ Π°Π²Ρ‚оматичСском Ρ€Π΅ΠΆΠΈΠΌΠ΅:

Β· Кнопка «Ρ€Π΅ΡˆΠΈΡ‚ΡŒ». ΠžΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΠ΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈΠ»ΠΈ Π²Ρ‹Π΄Π°Π΅Ρ‚ сообщСниС ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ошибкС (Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ», функция Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅ допустимых Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ).

Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ обучСния:

Β· «Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ столбСц». ВычисляСт Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ столбСц ΠΈ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ с Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ΠŸΡ€ΠΈ нСсовпадСнии Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π²Ρ‹Π΄Π°Π΅Ρ‚ сообщСниС ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅ «Π’Π΅Π΄ΡƒΡ‰ΠΈΠΉ столбСц Π²Ρ‹Π±Ρ€Π°Π½ Π½Π΅Π²Π΅Ρ€Π½ΠΎ». Π’Π°ΠΊΠΆΠ΅ вычисляСт ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ столбСц «ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅», Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для Π²Ρ‹Π±ΠΎΡ€Π° Π²Π΅Π΄ΡƒΡ‰Π΅ΠΉ строки.

Β· «Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π²Π΅Π΄ΡƒΡ‰ΡƒΡŽ строку». Находит Π²Π΅Π΄ΡƒΡ‰ΡƒΡŽ строку ΠΈ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ с Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ΠŸΡ€ΠΈ нСсовпадСнии Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π²Ρ‹Π΄Π°Π΅Ρ‚ сообщСниС ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅ «Π’Сдущая строка Π²Ρ‹Π±Ρ€Π°Π½Π° Π½Π΅Π²Π΅Ρ€Π½ΠΎ».

Β· «ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΡΠΈΠΌΠΏΠ»Π΅ΠΊΡΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ». ΠžΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΠ΅Ρ‚ ΠΎΠ΄ΠΈΠ½ шаг ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Гаусса для Π·Π°ΠΌΠ΅Π½Ρ‹ базисной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π’Π½ΠΈΠ·Ρƒ ΠΎΠΊΠ½Π° располоТСно ΠΏΠΎΠ»Π΅ для Π²Ρ‹Π²ΠΎΠ΄Π° многострочного тСкста (JTextArea), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ отобраТаСтся Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ информация ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ состоянии выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ… Π²Ρ‹Π±ΠΎΡ€Π° Π²Π΅Π΄ΡƒΡ‰ΠΈΡ… столбца ΠΈ ΡΡ‚Ρ€ΠΎΠΊΠΈ.

Рис. 1. Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ³ΠΎ прилоТСния.

Π‘ΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Ρ‹ интСрфСйса Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ³ΠΎ прилоТСния ΠΏΡ€ΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ прСдставлСны Π² ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ 1.

4. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ модуля Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΠΉ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ программирования Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ допустимого базисного Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

Π’Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ являСтся тСкстовый Ρ„Π°ΠΉΠ», содСрТащий Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ допустимоС базисноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ (Π½Π° Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ограничСния: максимальноС количСство свободных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… — 5, базисных — 8).

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ являСтся ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Π° Ρ‚Π°ΠΊΠΆΠ΅ сообщСния ΠΎ ΡΠΎΡΡ‚оянии выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ прСдоставляСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π΄Π²ΡƒΡ… Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹:

Β· автоматичСского,

Β· Ρ€Π΅ΠΆΠΈΠΌΠ° обучСния.

Π’ Π°Π²Ρ‚оматичСском Ρ€Π΅ΠΆΠΈΠΌΠ΅ (ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1, рис.2) Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ осущСствляСтся Π² ΠΎΠ΄Π½ΠΎ дСйствиС Π±Π΅Π· участия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ обучСния (ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1, рис.3) Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ выполняСтся пошагово с ΠΏΡ€ΠΈΠ²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ участия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ осущСствляСт Π²Ρ‹Π±ΠΎΡ€ Π²Π΅Π΄ΡƒΡ‰Π΅Π³ΠΎ столбца, Π·Π°Ρ‚Π΅ΠΌ Π²Π΅Π΄ΡƒΡ‰Π΅ΠΉ строки, послС Ρ‡Π΅Π³ΠΎ симплСкс Ρ‚Π°Π±Π»ΠΈΡ†Π° пСрСстраиваСтся ΠΈ ΠΈΡ‚Срация повторяСтся. ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ симплСкс Ρ‚Π°Π±Π»ΠΈΡ† вСдётся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΡ‚Π°Π½Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ сообщСниС ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ прСдусмотрСна ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ситуаций:

Β· Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ» (ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1, рис.4);

Β· цСлСвая функция Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅ допустимых Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ (ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1, рис.5).

Π’Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° систСма подсказок, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π±ΠΎΠ»Π΅Π΅ Π»Ρ‘Π³ΠΊΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ срСдством.

Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±Ρ‹Π»Π° Π²Ρ‹Π±Ρ€Π°Π½Π° NetBeans IDE, ΡΠ²Π»ΡΡŽΡ‰Π°ΡΡΡ срСдой Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Java.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° созданного ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ модуля прСдставляСт собой ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… классов:

Β· SimplexApp — Π³Π»Π°Π²Π½Ρ‹ΠΉ класс прилоТСния, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΠΉ запуск прилоТСния, созданиС ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния.

Β· SimplexView — класс Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ интСрфСйса, осущСствляСт ΠΈΡ… Π½Π°ΡΡ‚Ρ€ΠΎΠΉΠΊΡƒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ событий, Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

Β· SimplexAboutBox — класс, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΊΠ½ΠΎ «Πž ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅».

Β· SimplexSolve — класс, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ симплСкс-ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

Β· ReadFile — класс для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

Β· TableView — Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ симплСкс-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Β· Help — Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ подсказок ΠΎ Ρ…ΠΎΠ΄Π΅ выполнСния Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈ ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Класс SimplexSolve содСрТит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

static void initSolution (int varCount) — создаёт Π²Π΅ΠΊΡ‚ΠΎΡ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ размСрности.

static float[][] Solve (float[][] matrix) — осущСствляСт Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π² Π°Π²Ρ‚оматичСском Ρ€Π΅ΠΆΠΈΠΌΠ΅. ΠŸΠΎΠ»ΡƒΡ‡Π°Ρ Π½Π° Π²Ρ…ΠΎΠ΄ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ симплСкс-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½ΡƒΡŽ симплСкс-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ с ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ.

static boolean userChooseCol (float[][] matrix, JTable tableName) — выполняСт Π²Ρ‹Π±ΠΎΡ€ Π²Π΅Π΄ΡƒΡ‰Π΅Π³ΠΎ столбца ΠΈ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ с Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ истину, Ссли Π²Ρ‹Π±ΠΎΡ€ Π±Ρ‹Π» ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ Π²Π΅Ρ€Π½ΠΎ, ΠΈΠ½Π°Ρ‡Π΅ лоТь. Π’ ΡΠ»ΡƒΡ‡Π°Π΅ Ссли Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π»ΠΈ, Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСниС ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅.

static boolean userChooseRow (float[][] matrix, JTable tableName) — ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ограничСнности Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅ допустимых Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, выполняСт Π²Ρ‹Π±ΠΎΡ€ Π²Π΅Π΄ΡƒΡ‰Π΅ΠΉ строки ΠΈ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ с Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ истину, Ссли Π²Ρ‹Π±ΠΎΡ€ Π±Ρ‹Π» осущСствлён Π²Π΅Ρ€Π½ΠΎ, ΠΈΠ½Π°Ρ‡Π΅ лоТь. Π’ ΡΠ»ΡƒΡ‡Π°Π΅ Ссли Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π»ΠΈ, сообщаСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅.

static void userBuildNewTable (float[][] matrix, JTable tableName) — пСрСстраиваСт ΡΠΈΠΌΠΏΠ»Π΅ΠΊΡΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ‚ Π²Π΅ΠΊΡ‚ΠΎΡ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

static boolean checkSolved (float matrix[][]) — провСряСт Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ истину, Ссли Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ, ΠΈΠ½Π°Ρ‡Π΅ лоТь.

Класс ReadFile содСрТит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

static float[][] read (String filename) throws IOException — осущСствляСт Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. ΠŸΡ€ΠΈ отсутствии ошибок, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΡΠΈΠΌΠΏΠ»Π΅ΠΊΡΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, ΠΈΠ½Π°Ρ‡Π΅ Π²Ρ‹Π΄Π°Π΅Ρ‚ сообщСниС ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

static String[] doVarCol (), static String[] doVarRow () — ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ строку ΠΈ ΡΡ‚ΠΎΠ»Π±Π΅Ρ† обозначСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… для отобраТСния симплСкс-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

static int getVarCount () — Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство свободных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

static int getBvarCount () — Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство базисных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

static int getCondCount () — Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ.

Класс TableView содСрТит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

static void clearTable (JTable tableName) — ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ.

static void setNames (JTable tableName) — заполняСт ΡˆΠ°ΠΏΠΊΡƒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

static void fillTable (JTable tableName, float[][] matrix) — заполняСт симплСкс Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ.

static void fillProportion (JTable tableName, float[] proportion, int tempCInd) — заполняСт Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ столбСц ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ (Π² ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰Π΅ΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅).

Класс Help содСрТит ΠΌΠ΅Ρ‚ΠΎΠ΄

static String showHelp (int event) — осущСствляСт Π²Ρ‹Π²ΠΎΠ΄ подсказки Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠ΅Π³ΠΎ события.

Листинг класса SimplexSolve, содСрТащСго Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ симплСкс-ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ Π² ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ 2.

5. ВСстированиС ВСст № 1.

Π’Ρ…ΠΎΠ΄: Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ допустимым базисным Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ data1.txt. Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ автоматичСский Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹. НаТимаСм ΠΊΠ½ΠΎΠΏΠΊΡƒ «Ρ€Π΅ΡˆΠΈΡ‚ΡŒ».

Π’Ρ‹Ρ…ΠΎΠ΄: Π’ ΠΏΠ°Π½Π΅Π»ΠΈ «Π Π΅ΡˆΠ΅Π½ΠΈΠ΅» отобраТаСтся Π²Π΅ΠΊΡ‚ΠΎΡ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Π’ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ выводится симплСкс-Ρ‚Π°Π±Π»ΠΈΡ†Π° Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ выполнСния Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°. Π’ ΠΏΠΎΠ»Π΅ подсказки отобраТаСтся информация ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π° Ρ€Π΅ΡˆΠ΅Π½Π° ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ.

(ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1, рис. 2)

ВСст № 2.

Π’Ρ…ΠΎΠ΄: Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ допустимым базисным Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ data2.txt.

Π’Ρ‹Ρ…ΠΎΠ΄: Выводится сообщСниС «ΠžΡˆΠΈΠ±ΠΊΠ° Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…». Π’ ΠΏΠΎΠ»Π΅ подсказки отобраТаСтся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация ΠΎΠ± ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡΡ… Π½Π° Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.

(ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1, рис.4)

ВСст № 3.

Π’Ρ…ΠΎΠ΄1: Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ допустимым базисным Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ data5. txt, цСлСвая функция Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅ допустимых Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Ρ€Π΅ΠΆΠΈΠΌ обучСния. ВыдСляСм Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ столбСц. НаТимаСм ΠΊΠ½ΠΎΠΏΠΊΡƒ «Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ столбСц».

Π’Ρ‹Ρ…ΠΎΠ΄1: Выводится сообщСниС «Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ столбСц Π²Ρ‹Π±Ρ€Π°Π½ Π½Π΅Π²Π΅Ρ€Π½ΠΎ». Π’ ΠΏΠΎΠ»Π΅ подсказки отобраТаСтся подсказка с ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΠΌ Π²Ρ‹Π±ΠΎΡ€Π° Π²Π΅Π΄ΡƒΡ‰Π΅Π³ΠΎ столбца.

Π’Ρ…ΠΎΠ΄2: ВыдСляСм Π²Π΅Ρ€Π½Ρ‹ΠΉ Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ столбСц. НаТимаСм ΠΊΠ½ΠΎΠΏΠΊΡƒ «Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ столбСц».

Π’Ρ‹Ρ…ΠΎΠ΄2: Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ выводится Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ столбСц ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ.

Π’Ρ…ΠΎΠ΄3: ВыдСляСм Π²Π΅Π΄ΡƒΡ‰ΡƒΡŽ строку. НаТимаСм ΠΊΠ½ΠΎΠΏΠΊΡƒ «Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π²Π΅Π΄ΡƒΡ‰ΡƒΡŽ строку».

Π’Ρ‹Ρ…ΠΎΠ΄3: Выводится сообщСниС «Ρ„ункция Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅ допустимых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ». РСшСниС Π·Π°Π΄Π°Ρ‡ΠΈ прСкращаСтся. Π’ ΠΏΠΎΠ»Π΅ подсказки выводится информация ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ дальнСйшСС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ».

(ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1, рис. 5)

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

По ΠΈΡ‚ΠΎΠ³Π°ΠΌ Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ программирования симплСкс-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ допустимого базисного Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

БимплСкс-ΠΌΠ΅Ρ‚ΠΎΠ΄ являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ извСстным ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎ примСняСмым Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΠ±Ρ‰Π΅ΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ программирования. Алгоритм ΠΌΠ΅Ρ‚ΠΎΠ΄Π° прост Π² ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ ΠΈ Π»Π΅Π³ΠΎΠΊ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½ΠΈΠΊΠ°ΠΊΠΈΡ… слоТностСй ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π° Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ. Однако, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ симплСкс-ΠΌΠ΅Ρ‚ΠΎΠ΄ являСтся достаточно эффСктивным Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ, показавшим Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΡ€ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Π›ΠŸ, ΠΎΠ½ ΡΠ²Π»ΡΠ΅Ρ‚ся Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ с ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° этого состоит Π² ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€Π½ΠΎΠΌ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π΅ симплСкс-ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°ΡŽΡ‰Π΅Π³ΠΎ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΌΠ½ΠΎΠ³ΠΎΠ³Ρ€Π°Π½Π½ΠΈΠΊΠ° допустимых Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ поискС ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ эффСктивСн Π½Π° Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΎΠΌ Π½Π°Π±ΠΎΡ€Π΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ ΠΆΠ΅ ΠΈΡ… ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Ρ‚ΡŒ скачкообразно.

Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ Π±Ρ‹Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ всС трСбования, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятСн ΠΈ Π»Π΅Π³ΠΎΠΊ Π² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠΈ. ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ прилоТСния прСдоставляСт возмоТности для Π΅Π³ΠΎ дальнСйшСй Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΈ Π²ΡΡ‚раивания Π² Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ комплСксы.

Бписок использованной Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… срСдств

1. ИсСнбаСва Π•. Н. ΠœΠ•Π’ΠžΠ”Π˜Π§Π•Π‘ΠšΠ˜Π• Π£ΠšΠΠ—ΠΠΠ˜Π― ΠΊ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡŽ практичСских занятий ΠΏΠΎ ΠΊΡƒΡ€ΡΡƒ «Π‘истСмный Π°Π½Π°Π»ΠΈΠ·» Π½Π° Ρ‚Π΅ΠΌΡƒ «Π‘имплСкс-ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ программирования» / Π•. Н. ИсСнбаСва. — Π˜ΠΆΠ΅Π²ΡΠΊ: Π˜ΠΆΠ“Π’Π£, 1999. — 14с.

2. Π­Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Ρ‹ΠΉ рСсурс: БимплСкс ΠΌΠ΅Ρ‚ΠΎΠ΄: программная рСализация симплСкс-ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Java — http://www.mathelp.spb.ru/lp.htm

3. Π­Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Ρ‹ΠΉ рСсурс: Wikipedia — Π›ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ — http://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5

4. Π­Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Ρ‹ΠΉ рСсурс: Wikipedia — Π—Π°Π΄Π°Ρ‡Π° Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ программирования http://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5

5. Π‘Ρ€Π΅Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ NetBeans IDE 6.9.1

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Рис. 2. АвтоматичСский Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Рис. 3. Π Π΅ΠΆΠΈΠΌ обучСния Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ симплСкс ΠΌΠ΅Ρ‚ΠΎΠ΄ Рис. 4. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° события «ΠžΡˆΠΈΠ±ΠΊΠ° Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…»

Рис. 5. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° события «Π¦Π΅Π»Π΅Π²Π°Ρ функция Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅ допустимых Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ».

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 2

Листинг класса SimplexSolve

package simplex;

import javax.swing.JOptionPane;

import javax.swing.JTable;

public class SimplexSolve {

static boolean solved = false;

static boolean lim = false;

static int tempCInd = 0;

static int minRInd = 0;

static int minCInd = 1;

static float[] solution;

//Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π² Π°Π²Ρ‚оматичСском Ρ€Π΅ΠΆΠΈΠΌΠ΅

static float[][] Solve (float[][] matrix){

M1: {

solved = true;

// провСряСм Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

for (int i = 0; i <= ReadFile. colCount; i++){

if (matrix[i][0] < 0)

solved = false;

}

/ /ΠΏΠΎΠΊΠ° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ

while (!solved){

// Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ столбСц

float minR = matrix[0][0];

int minRInd = 0;

for (int i = 0; i <= ReadFile. colCount; i++){

if (matrix[i][0] < minR){

minR = matrix[i][0];

minRInd = i;

}

}

//провСряСм, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° Π»ΠΈ цСлСвая функция Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅ Π΄ΠΎΠΏ. Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ

lim = false;

for (int i = 0; i <= ReadFile. rowCount; i++){

if (matrix[minRInd][i] > 0)

lim = true;

}

//Ссли функция Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π°, Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ сообщСниС ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅, ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅ΠΌ

//Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

if (!lim){

solved = true;

JOptionPane.showMessageDialog (null, «Ρ„ункция Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅ допустимых Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ»);

break M1;

}

//Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π²Π΅Π΄ΡƒΡ‰ΡƒΡŽ строку

float minC = matrix[ReadFile.colCount][1]/matrix[minRInd][1];

int minCInd = 1;

for (int i = 1; i < tempCInd; i++){

if (matrix[ReadFile.colCount][i]/matrix[minRInd][i] < minC){

minC = matrix[ReadFile.colCount][i]/matrix[minRInd][i];

minCInd = i;

}

}

for (int i = tempCInd + 1; i <= ReadFile. rowCount; i++){

if (matrix[ReadFile.colCount][i]/matrix[minRInd][i] < minC){

minC = matrix[ReadFile.colCount][i]/matrix[minRInd][i];

minCInd = i;

}

}

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΈΠ· Π±Π°Π·ΠΈΡΠ° Π±Π°Π·ΠΈΡΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ [0][minCInd], Π²Π²ΠΎΠ΄ΠΈΠΌ Π² Π±Π°Π·ΠΈΡ

//ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ [minRInd][0]

ReadFile.varCol[minCInd-1] = ReadFile. varRow[minRInd] ;

//строим Π½ΠΎΠ²ΡƒΡŽ ΡΠΈΠΌΠΏΠ»Π΅ΠΊΡΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ

//Π΄Π΅Π»ΠΈΠΌ Π²Π΅Π΄ΡƒΡ‰ΡƒΡŽ строку Π½Π° Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ элСмСнт [minRInd][minCInd]

float temp = matrix[minRInd][minCInd];

System.out.print («>> «+ temp + «n»);

System.out.print («nвСдущая строка: «);

for (int i = 0; i <= ReadFile. colCount; i++){

matrix[i][minCInd] /= temp;

}

//ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π½ΡƒΠ»ΠΈ Π² Π²Π΅Π΄ΡƒΡ‰Π΅ΠΌ столбцС

for (int j = 0; j < minCInd; j++){

float minTemp = matrix[minRInd][j];

for (int i = 0; i <= ReadFile. colCount; i++){

matrix[i][j] += matrix[i][minCInd] * -minTemp;

}

}

for (int j = minCInd+1; j <=ReadFile.rowCount; j++){

float minTemp = matrix[minRInd][j];

for (int i = 0; i <= ReadFile. colCount; i++){

matrix[i][j] += matrix[i][minCInd] * -minTemp;

}

}

//обновляСм Π²Π΅ΠΊΡ‚ΠΎΡ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

for (int i = 0; i < ReadFile. bvarCount; i++){

for (int j = 0; j < ReadFile. varCount; j++){

int k = j + 1;

String tempS = «x» + k;

if (tempS.equals (ReadFile.varCol[i]))

solution[j] = matrix[ReadFile.colCount][i+1];

}

}

tempCInd = minCInd;

//рСкурсивно Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ, ΠΏΠΎΠΊΠ° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ

Solve (matrix);

}

}

return matrix;

}

//создаСм Π²Π΅ΠΊΡ‚ΠΎΡ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

static void initSolution (int varCount){

solution = new float[varCount];

for (int i = 0; i < varCount; i++){

solution[i] = 0;

}

}

//Π²Ρ‹Π±ΠΎΡ€ Π²Π΅Π΄ΡƒΡ‰Π΅Π³ΠΎ столбца Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ обучСния

static boolean userChooseCol (float[][] matrix, JTable tableName){

boolean err = false;

M1: {

//Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ столбСц

float minR = matrix[0][0];

minRInd = 0;

for (int i = 0; i <= ReadFile. colCount; i++){

if (matrix[i][0] < minR){

minR = matrix[i][0];

minRInd = i;

}

}

//провСряСм Π²Ρ‹Π±ΠΎΡ€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

while (minRInd ≠ SimplexView. getSelectedCol () — 1){

JOptionPane.showMessageDialog (null, «Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ столбСц Π²Ρ‹Π±Ρ€Π°Π½

Π½Π΅Π²Π΅Ρ€Π½ΠΎ");

err = true;

break M1;

}

int temp = minRInd;

float[] proportion = new float[ReadFile.rowCount];

//вычисляСм Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ столбСц ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ

for (int i = 1; i <= ReadFile. rowCount; i++){

if (i == tempCInd){

proportion[i-1] = java.lang.Float.NaN;

}

else{

proportion[i-1] = matrix[ReadFile.colCount][i] /

matrix[temp][i];

}

}

TableView.fillProportion (tableName, proportion, tempCInd);

}

return err;

}

//Π²Ρ‹Π±ΠΎΡ€ Π²Π΅Π΄ΡƒΡ‰Π΅ΠΉ строки Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ обучСния

static boolean userChooseRow (float[][] matrix, JTable tableName){

lim = false;

boolean err = false;

M1:{

//провСряСм, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° Π»ΠΈ цСлСвая функция Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅ Π΄ΠΎΠΏ. Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ

for (int i = 0; i <= ReadFile. rowCount; i++){

if (matrix[minRInd][i] > 0)

lim = true;

}

if (!lim){

JOptionPane.showMessageDialog (null, «Ρ„ункция Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° Π½Π°

мноТСствС допустимых Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ");

break M1;

}

//Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π²Π΅Π΄ΡƒΡ‰ΡƒΡŽ строку

float minC = matrix[ReadFile.colCount][1]/matrix[minRInd][1];

minCInd = 1;

for (int i = 1; i < tempCInd; i++){

if (matrix[ReadFile.colCount][i]/matrix[minRInd][i] < minC){

minC = matrix[ReadFile.colCount][i]/matrix[minRInd][i];

minCInd = i;

}

}

for (int i = tempCInd + 1; i <= ReadFile. rowCount; i++){

if (matrix[ReadFile.colCount][i]/matrix[minRInd][i] < minC){

minC = matrix[ReadFile.colCount][i]/matrix[minRInd][i];

minCInd = i;

}

}

//провСряСм Π²Ρ‹Π±ΠΎΡ€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

System.out.print («user: «+ SimplexView. getSelectedRow () + «; min: «

+minCInd);

while (minCInd ≠ SimplexView. getSelectedRow ()){

err = true;

JOptionPane.showMessageDialog (null, «Π²Π΅Π΄ΡƒΡ‰Π°Ρ строка Π²Ρ‹Π±Ρ€Π°Π½Π°

Π½Π΅Π²Π΅Ρ€Π½ΠΎ");

break M1;

}

}

return err;

}

//пСрСстраиваСт ΡΠΈΠΌΠΏΠ»Π΅ΠΊΡΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ

static void userBuildNewTable (float[][] matrix, JTable tableName){

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΈΠ· Π±Π°Π·ΠΈΡΠ° Π±Π°Π·ΠΈΡΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ [0][minCInd], Π²Π²ΠΎΠ΄ΠΈΠΌ Π² Π±Π°Π·ΠΈΡ

//ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ [minRInd][0]

ReadFile.varCol[minCInd-1] = ReadFile. varRow[minRInd] ;

//строим Π½ΠΎΠ²ΡƒΡŽ ΡΠΈΠΌΠΏΠ»Π΅ΠΊΡΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ

//Π΄Π΅Π»ΠΈΠΌ Π²Π΅Π΄ΡƒΡ‰ΡƒΡŽ строку Π½Π° Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ элСмСнт [minRInd][minCInd]

float temp = matrix[minRInd][minCInd];

for (int i = 0; i <= ReadFile. colCount; i++){

matrix[i][minCInd] /= temp;

}

//ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π½ΡƒΠ»ΠΈ Π² Π²Π΅Π΄ΡƒΡ‰Π΅ΠΌ столбцС

for (int j = 0; j < minCInd; j++){

float minTemp = matrix[minRInd][j];

for (int i = 0; i <= ReadFile. colCount; i++){

matrix[i][j] += matrix[i][minCInd] * -minTemp;

}

}

for (int j = minCInd+1; j <=ReadFile.rowCount; j++){

float minTemp = matrix[minRInd][j];

for (int i = 0; i <= ReadFile. colCount; i++){

matrix[i][j] += matrix[i][minCInd] * -minTemp;

}

}

for (int i = 0; i < ReadFile. bvarCount; i++){

for (int j = 0; j < ReadFile. varCount; j++){

int k = j + 1;

String tempS = «x» + k;

if (tempS.equals (ReadFile.varCol[i]))

solution[j] = matrix[ReadFile.colCount][i+1];

}

}

tempCInd = minCInd;

}

//провСряСт, ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ Π»ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

static boolean checkSolved (float matrix[][]){

solved = true;

for (int i = 0; i <= ReadFile. colCount; i++){

if (matrix[i][0] < 0)

solved = false;

}

if (solved){

JOptionPane.showMessageDialog (null, «Π·Π°Π΄Π°Ρ‡Π° Ρ€Π΅ΡˆΠ΅Π½Π° «);

tempCInd = 0;

}

return solved;

}

}

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ