Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Excel10УКР

.pdf
Скачиваний:
45
Добавлен:
27.03.2016
Размер:
3.32 Mб
Скачать

На перший погляд у даній задачі взагалі немає місця для оптимізації

– добрива потрібно внести відповідно до норм, вказаних у таблиці, які були отримані у результаті дослідження ґрунту агрохімічною лабораторією. Це дійсно так, якщо нам вистачить добрив. Легко обчислити, що для внесення добрив відповідно до рекомендацій агрохімічній лабораторії потрібно 193,2 т азотних, 289,1 т фосфорних і 168 т калійних добрив. Проте такої кількості добрив у господарства немає. Є два виходи із становища. Перший – зменшити рекомендовані дози внесення добрив. Як це зробити не дуже зрозуміло і головне, ми не знатимемо приріст врожайності. Дійсно так не вчиняю. Слід іти іншим шляхом – вносити добрива тільки у частину площ, але відповідно до вимог агрохімічної лабораторії. Тепер ми можемо розпочати формулювання математичної моделі.

1. Змінні для оптимізації

xij площа, де вносяться добрива для i –ої культури на j –ой ділянці (га), тобто

x11 площа для пшениці, де вносяться добрива, на 1–ій ділянці (га)

..........................

x32 площа для картоплі, де вносяться добрива, на 2–ій ділянці

(га).

2. Цільова функція

Загальна вартість надбавки урожаю (грн.)

Z 105 x11 112 x12 120 x21 126 x22 444 x31 494 x32 max

3. Обмеження.

а) По наявності добрив:

Азотних –

0,6x11 0,6x12

0,5x21 0,6x22

0,3x31 0,3x32

170

Пшениця

Жито

Картопля

 

Фосфорних –

 

 

0,8x11 0,9x12

0,7x21 0,7x22

0,7x31 0,7x32

250

Пшениця

Жито

Картопля

 

 

 

92

Калійних –

 

 

0,4x11 0,5x12

0,4x21 0,4x22

0,5x31 0,5x32 150

Пшениця

Жито

Картопля

б) За площею окремих ділянок, де вносяться добрива:

x11 100,

x12 55

(Пшениця)

x21

87,

x22

48

( Жито)

x31

54,

x32

39

(Картопля)

б) За гарантованим виробництвом продукції:

Зерна:

12(100 x11 ) (12 7)x11

Пшен иця1 ділян ка

16(55 x12 ) (16 8)x12

Пшен иця2 ділян ка

14(87 x21 ) (14 6)x21

Жито1 ділян ка

15(48 x22 ) (15 7)x22

Жито 2 ділян ка

5000

 

 

 

Картоплі:

 

 

 

54 136 34x31

 

Картопля1

ділянка

39 137 38x32

13000

Картопля 2

ділянка

4. Природні обмеження: xij 0,i 1...3, j 1,2.

8.6.4. Задача логічного програмування

Студентський комітет вирішив внести свій внесок до створення щасливих сімейних пар серед випускників університету. Для цього вони провели анкетування про взаємні симпатії хлопців та дівчат. Результати анкетування для однієї з груп студентів приведені в двох таблицях, в яких для простоти прізвища студентів замінені їх порядковими номерами. Симпатії хлопців наведені в таблиці 8.6.4.1, а симпатії дівчат – в таблиці 8.6.4.2.

 

 

 

 

 

93

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблиця 8.6.4.1

 

 

 

Симпатії хлопців

 

 

 

 

 

Дівчата

1

2

3

4

5

6

7

8

9

10

11

12

Хлопці

 

 

 

 

 

 

 

 

 

 

 

 

1

 

1

 

1

 

 

 

1

 

1

 

1

2

1

1

 

 

 

 

1

 

1

 

1

 

3

 

1

 

 

 

 

 

1

 

1

1

 

4

1

 

1

 

1

 

 

 

 

1

 

 

5

1

 

 

1

 

 

1

 

1

 

1

 

6

 

1

1

1

 

 

 

 

 

 

 

1

7

1

 

 

 

1

 

 

1

 

1

 

1

8

 

1

 

1

 

 

 

1

1

 

1

 

 

 

 

 

 

 

 

 

 

 

Таблиця 8.6.4.2

 

 

 

Симпатії дівчат

 

 

 

 

 

Дівчата

1

2

3

4

5

6

7

8

9

10

11

12

Хлопці

 

 

 

 

 

 

 

 

 

 

 

 

1

1

 

 

 

1

 

1

 

1

 

1

 

2

 

1

 

1

 

1

 

1

 

 

1

 

3

 

 

 

 

1

 

1

 

 

1

 

 

4

 

1

 

 

 

1

 

1

 

 

 

 

5

1

 

 

1

 

1

 

1

 

1

 

1

6

 

 

1

 

1

 

 

1

 

 

 

1

7

1

1

 

 

 

 

1

 

 

1

 

 

8

 

1

 

1

1

 

1

 

1

 

 

 

94

Необхідно рекомендувати створити сім’ю максимальному числу пар з взаємною симпатією.

1 крок. Введемо змінні для оптимізації Рішенням є матриця такої ж структури як і приведені в умовах задачі

таблиці. xij рекомендація i–му хлопцю і j–ой дівчині створити сім’ю

( i 1...8, j 1...12) . Відразу ж необхідно відмітити , що змінні логічні (0 або 1).

2 крок. Цільову функцію можна записати так:

8

12

 

 

 

Z Sijю Sijд xij

max

,

(8.6.4.1)

i 1

j 1

 

 

 

 

де Sijю – матриця симпатій хлопців, відповідна таблиці 8.6.4.1., Sijд – матриця симпатій дівчат, відповідна таблиці 8.6.4.2.

3 крок. Вирази для обмежень

У даній задачі є тільки одне, природне обмеження, зрозуміле всім – кожна людина може створити тільки одну сім’ю. Для нашої задачі записати це можна таким чином:

8

12

xij 1, j 1...12,

xij 1,i 1...8

i1

j1

Відзначимо, що оптимальних решений в таких задачах, що приводять до одного і того ж значення цільової функції, може бути багато. Зро-

зуміло, що Z 8 .

Тепер легко поставити задачу для пошуку рішень. Можна ввести цільову функцію відповідно до формули 8.6.4.1, але краще матрицю

{Sijþ Sijä } обчислити окремо. Цікаво відзначити, що евристичний метод,

що рекомендується для таких задач авторами надбудови Solver, найдовше шукає рішення. Дуже швидко справляється із задачею симплекс–метод, декілька повільніше, але теж справляється, метод узагальненого знижуючого градієнта. Всі методи дають рішення, що відрізняються, із значенням цільової функції рівним 6. У таблиці 8.6.4.3 наведено рішення для симп- лекс–метода.

 

 

 

 

 

95

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблиця 8.6.4.3

 

Рішення для симплекс-метода

 

 

Дівчата

1

2

3

4

5

6

7

8

9

10

11

12

Хлопці

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

2

 

1

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

1

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

5

 

 

 

1

 

 

 

 

 

 

 

 

6

 

 

1

 

 

 

 

 

 

 

 

 

7

1

 

 

 

 

 

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

1

 

 

 

Завдання на оптимізацію різних аспектів сільськогосподарського ви-

робництва наведено в [9]. Велика кількість різних оптимізаційних завдань

пропонувалась на загально-університетських олімпіадах МНАУ [4] (більш

повний варіант доступний у ЛКМ університету L:\Рейтинг\Circle_prog\).

96

9.ЛАБОРАТОРНА РОБОТА № 10. СТВОРЕННЯ МАКРОСІВ

УMS Office в якості вбудованої мови програмування використову-

ється Visual Basic for Applications (VBA).

Визначення. Макрос в Excel це програма на VBA, яка може активізуватися у вигляді призначеної для користувача функції або при виконанні певних дій (вибір пункту меню, натиснення комбінації клавіш або кнопки і тому подібне).

З приведеного визначення виходить, що для створення макросів начебто необхідно знати мову VBA, проте в компонентах MS Office (Word, Excel) реалізована чудова можливість створення макросів без знання VBA - автоматичний запис дій користувача у вигляді VBA-програми. Стандартно активізація таких макросів здійснюється через комбінацію клавіш, що встановлюються користувачем.

У MS Office 2010 для роботи з макросами розроблений спеціальний формат файлу, що має розширення *.xlsm. У переліку можливих форматів при збереженні треба вибрати «Книга Excel с поддержкой макросов». Можна створювати макроси в звичайній книзі з розширенням *.xlsx і вони працюватимуть, але зберегти такий файл з макросами не можна.

Зауваження. Макроси можуть автоматично відключатися службою безпеки. При повторному відкритті збереженої книги з макросами служба безпеки під панелями інструментів розміщує наступне повідомлення (рис. 9.1). Після натиснення на кнопку «Включить содержимое» такий файл надалі відкриватиметься без попередження системи безпеки.

Рис. 9.1. Повідомлення служби безпеки при відкритті файлу з ма кросами

Для демонстрації користі макросів і конкретних дій при їх створенні розглянемо спрощення звернення матриці заданого порядку за допомогою

97

макросу. Додатково задамо умову, щоб макрос для елементів зворотної матриці виставив 8 знаків після коми, напівжирний шрифт і зробив автопідбір ширини стовпців.

Розмістимо на листі елементи матриці 4*4 і розкриємо невелике меню кнопки Макроси (панель інструментів Вид) і виберемо в нім рядок

Запись макроса (рис. 9.2):

Рис. 9.2. Вікно привласнення макросу імені і гарячої клавіші

Краще макросу дати ім'я, що відображає його призначення, в даному випадку, наприклад, ObrMatr. При завданні комбінації клавіш для активізації макросу необхідно уникати системних команд типу Ctrl+S, Ctrl+V і тому подібних. Рекомендується зберегти макрос у своєму файлі. Після натиснення кнопки ОК усі Ваші дії на листі записуватимуться у вигляді команд мови VBA, тому при виконанні дій, які ви хочете доручити макросу, необхідно уникати зайвих операцій.

Відразу після того як усі дії яки доручаються макросу виконані, необхідно зупинити запис з меню кнопки Макросы. Передусім, випробуємо макрос. Для цього видалимо зворотну матрицю і активізуємо макрос вибраною комбінацією клавіш. Макрос чудово працює. Спробуємо застосувати його для звернення матриці, розташованої у іншому місці листа. Тут нас чекає розчарування - макрос обертає тільки матрицю A1 : D4, незалежно від розташування курсору. Розглянемо текст нашого макросу. Для цього виконаємо Вид => Макросы => Макросы => Войти (гаряча кла-

віша Alt+F11). В результаті викличеться редактор VBA (рис. 9.3) :

98

Рис. 9.3. Текст макросу в VBA

У першому рядку тексту вибирається конкретний діапазон осередків, який ми виділили для зворотної матриці при створенні макросу. Спробуємо цей рядок виключити з тексту, перетворивши на коментар (одинарна лапка перед рядком). Тепер макрос працює у будь-якому місці листа, але відображається тільки один елемент зворотної матриці, оскільки перед викликом функції МОБР() місце для зворотної матриці не виділяється. Це необхідно буде зробити вручну перед активізацією макросу. При цьому звертається матриця, розташована відносно курсору, як показано на малюнку 9.4:

Рис. 9.4. Приклад звернення макросом матриці в довільному місці

Тепер звернемо увагу на другий рядок тексту макросу. Не важко здогадатися, що в ній викликається функція МОБР(), ім'я якої записане в первинному англомовному варіанті, як і увесь інший текс макросу. Адреса матриці, що обертається, записана зовсім інакше, ніж ми звикли. Цю систему запису корисно розуміти. Як вказувалося в 1-му розділі, можна перейти від нумерації стовпців латинськими буквами до звичайної числової нумерації (Файл => Параметры => Формулы => Стиль ссылок R1C1).

В цьому випадку адреса клітинки задається у вигляді номера рядка, перед яким ставиться буква R (від англійського row - рядок) і номера стовпця, перед яким ставиться буква C (від англійського column - стовпець), наприклад клітинка D5 запишеться як R5C4. Як і в нашому макросі, часто

99

адреса осередку вказується відносно курсору. Зміщення від курсору вліво або вище вказується у від’ємних числах, зміщення правіше або нижче – у додатних числах, які, як і індекси в мовах програмування, записуються в квадратних дужках (рис. 9.5) :

Рис. 9.5. Відносна адресація у функції МОБР()

RC[- 5] - лівий верхній кут початкової матриці (нульове зміщення по рядках і зміщення на 5 стовпців вліво відносно курсору, R[0] скорочено до R). R[3]C[- 2] - правий нижній кут (зміщення на 3 рядки вниз і на 2 стовпці лівіше). Таким чином, в цьому режимі адреси масивів у формулах відносні. При копіюванні на інше місце вони не міняються, але забезпечать обчислення зворотної матриці зі зміщеного діапазону. Для прив'язки формули до конкретних осередків можна як і раніше використовувати клавішу F4 і формула в даному випадку трансформується в =МОБР(R10C6:R13C9). Ця формула при копіюванні теж не мінятиметься, і завжди обертатиме початкову матрицю.

Пошук команди, яка виділятиме діапазон осередків відносно поточного положення курсору вимагає поглиблення в конструкції мови VBA. Ми замість цього звернемо увагу на рядок Относительные ссылки в меню кнопки Макросы (рис. 9.6):

Рис. 9.6. Меню кнопки Макроси

Виявляється, що це ключ до створення макросів, які братимуть дані з вказаної нами області листа. Включимо прапорець Относительные

ссылки (при цьому значок поряд з написом як би втопиться – ) і знову створимо макрос для звернення матриці. Тепер нічого виділяти не треба, зворотна матриця обчислюється по гарячій клавіші. Розглянемо текст нового макросу :

100

Змінився тільки перший рядок, в якому перед функцією Range() (діапазон)з'явилася конструкція ActiveCell (активна клітинка - клітинка на яку встановлений курсор). Для виділення вказаний діапазон A1:D4, але тепер нумерація осередків йде не від початку листа, а від місця положення курсору.

Зауваження. Перед включенням запису макросу поставте курсор в потрібну клітинку і цю клітинку виділите кольором, щоб потім не замислюватися про те, відносно якої клітинки ведуться Ваші розрахунки.

Створення макросів в режимі запису дій користувача в принципі дозволяє будь-які обчислення проводити по натисненню гарячої клавіші, у тому числі обчислення розглянутих лабораторних робіт. Проте є і обмеження. Наприклад, якщо ми захочемо, щоб при зверненні матриці макрос сприйняв розмірність матриці, вказану в клітинці, то знову зіткнемося з необхідністю вивчення мови VBA. Без модифікації макросу не працює відносне посилання при побудові графіків і діаграм.

Варіанти лабораторної роботи

1.Написання імені студента шляхом необхідного виділення меж клітинок.

2.Форматування виділеного тексту. Шрифт 14, Courier New, вирівнювання по центру, курсив, колір білий на синьому фоні.

3.Форматування виділеного тексту. Шрифт 16, Arial, вирівнювання по центру, жирний, колір синій в жирній червоній рамці.

4.Обчислення медіани і моди по вибірці заданої розмірності.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]