Задача про ресурсы и процессы

Темы связанные с инженерными разработками, но не подходящие в другие ветки форума
Mig29
beginner
beginner
Сообщения: 23
Зарегистрирован: 29 окт 2008, 11:23
Версия LabVIEW: 8

Задача про ресурсы и процессы

Сообщение Mig29 »

Вообщем есть задача про ресурсы и процессы, никак не могу решить... не получается работать с массивами внутри циклов :( вроде если не в цикле - то всё отлично работает, как только делаю циклы, то начинаются проблемы с несовпадением данных и т.п.

Задача:
Есть 2 ресурса и 4 процесса. Каждый процесс должен определенное время попользоваться ресурсом. Одновременно процессы ресурсом пользоваться не могут и если процесс начал пользоваться - то делает это установленное время (оно неделимо). Но один процесс может пользоваться 2мя ресурсами одновременно.
Таким образом получается два 4-элементных массива соответствующие 2м ресурсам:
5,2,7,3 и 3,6,10,2
(первый процесс должен попользоваться 5 и 3 секунд 1-м и 2-м ресурсом соответственно, второй процесс 2 и 6 секунд, третий - 7 и 10...и т.д. думаю суть ясна)
Так вот нужно прогнать эти два массива и в результате получить время простоя одного из ресурсов, т.е. то время, когда другой ресурс будет задействован, а этот - нет.

Решение на бумаге такое:
Вложение:
zadacha.gif
zadacha.gif (944 байт) 7414 просмотров

Красным выделены заявленные в условии секунды, которые процессы должны попользоваться... а черным - разность между процессами... сколько еще осталось этому процессу пользоваться до того, как вступит новый. Т.е. если изначально было 5 и 3 секунд (время пользования ресурсами первым процессом). Вторым ресурсом он попользовался заявленные 3 секунды и им начал пользоваться второй процесс, а первым процессом 2 секунды всё еще пользуется первый процесс до того, как вступит второй. В итоге получается 2+2=4 секунды будет простаивать 1-й ресурс.
На бумаге-то оно всё вроде легко и просто, а в LabView запрограммировать не получается. Господа знатоки, помогите пожалуйста.
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Задача про ресурсы и процессы

Сообщение Eugen Graf »

А какие процессы? Тебе надо реализовать ещё и сами процессы или только рассчёт? Что должно происходить когда время истекает? Нужно всего лишь представить весь рассчёт на лицевой панели? Симулировать процессы? Какая вообще конечная задача?
Слишком мало информации :dntknw:
Mig29
beginner
beginner
Сообщения: 23
Зарегистрирован: 29 окт 2008, 11:23
Версия LabVIEW: 8

Re: Задача про ресурсы и процессы

Сообщение Mig29 »

Нет, "процессы" и "ресурсы" - это абстрактные понятия, просто ими легче описать условие. На лицевой панели должно быть собственно два массива и высчитанное число - сколько будет простаивать "ресурс". Время тут тоже - просто числа, никакой привязки к реальному времени нет. Задача в том, чтобы из этих двух массивов путём вычитаний (как я показал на рисунке выше) найти требуемое число простоя одного из ресурсов.

Вот эта же задача, но время простоя находится путём сортировки массивов по убыванию и возрастанию.
labview.gif
Но там формулу я вывел, она простая и на блок-диаграмме всё простенько, никаких циклов нет.
А вот, как мне третьим способом надо решить (что собственно, я и спрашиваю) - это не сортируя массивы, а в том порядке, в котором элементы в них есть - в нём и считать. И там без циклов никак...
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Задача про ресурсы и процессы

Сообщение Eugen Graf »

Ну и как там дела? Что нибудь получается?

Я бы смог наверное сделать визуальный симулятор процессов и ресурсов с представленными условиями, но вот без симулятора как то трудновато представить задачу. Если в голове или на бумаге есть решение, то выложи, посмотрим, думаю спрограммировать будет нетрудно.
Mig29
beginner
beginner
Сообщения: 23
Зарегистрирован: 29 окт 2008, 11:23
Версия LabVIEW: 8

Re: Задача про ресурсы и процессы

Сообщение Mig29 »

В том и дело, что визуальная сторона мне по сути не нужна... мне нужны сами "внутренности", т.е. программа, высчитывающая число. На бумаге оно у меня всё легко получается, а в ЛабВью - нет. Вечером прийду - распишу всё наиподробнейшим образом!
Mig29
beginner
beginner
Сообщения: 23
Зарегистрирован: 29 окт 2008, 11:23
Версия LabVIEW: 8

Re: Задача про ресурсы и процессы

Сообщение Mig29 »

Есть два массива (возьмём те же) 5,2,7,3 и 3,6,10,2 - это якобы массивы времени, показывающие сколько секунд\часов\дней (не важно, это всё условности) каждый из четырёх процессов должен поюзать 2 ресурса (первый процесс должен попользоваться 5 и 3 секунд 1-м и 2-м ресурсом соответственно, второй процесс 2 и 6 секунд, третий - 7 и 10, четвертый - 3 и 2).
Начинаем высчитывать время простоя:
5-3=2 (т.е. еще 2 секунды 1-й процесс будет юзать 1-й ресурс, в то время как вторым ресурсом завладеет 2-й процесс со временем 6)
6-2=4 (еще 4 секунды 2-й процесс будет юзать 2-й ресурс, и он же завладеет 1-м ресурсом и будет юзать 2 секунды)
4-2=2 (всё еще 2 секунды 2-й процесс будет юзать 2-й ресурс, он же поюзал 1-й ресурс и передает его 3-му процессу со временем 7)
7-2=5 (еще 5 сек 3-й процесс юзает 1-й ресурс, а 2-й ресурс передается дальше ему же на 10 сек)
10-5=5 (еще 5 сек вторым ресурсом пользуется 3-й процесс, а 1-й ресурс передается последнему 4-му процессу на 3 секунды)
5-3=2 (первый ресурс больше никому не нужен а осталось еще 2 секунды использования 3-м процессом плюс, прописанные в массиве 2 секунды - 4му процессу)
Таким образом 1-й ресурс будет стоять, а второй использоваться 2+2=4 секунды.

Этот рассчет мне и надо реализовать циклом... Если что-то не понятно, спрашивайте.
Аватара пользователя
Forward

Activity Tutorials Black
professional
professional
Сообщения: 337
Зарегистрирован: 03 мар 2008, 12:41
Награды: 3
Версия LabVIEW: 2010
Откуда: Кишинев
Контактная информация:

Re: Задача про ресурсы и процессы

Сообщение Forward »

Может я что-то упустил из вышеизложенного алгоритма, но если тебе нужно только конечное число - то можно просто вычислить разность сумм элементов массива. Например вот так:

Или я что-то не понял?
Вложения
resource.JPG
Mig29
beginner
beginner
Сообщения: 23
Зарегистрирован: 29 окт 2008, 11:23
Версия LabVIEW: 8

Re: Задача про ресурсы и процессы

Сообщение Mig29 »

В том-то и дело, что циклом нужно и именно как я описал. Разностью сумм - это я уже делал...
Аватара пользователя
Forward

Activity Tutorials Black
professional
professional
Сообщения: 337
Зарегистрирован: 03 мар 2008, 12:41
Награды: 3
Версия LabVIEW: 2010
Откуда: Кишинев
Контактная информация:

Re: Задача про ресурсы и процессы

Сообщение Forward »

Mig29 писал(а):В том-то и дело, что циклом нужно и именно как я описал. Разностью сумм - это я уже делал...
Я никогда не был в Германии и по немецки нихренштейн, но тут я сразу всмопнил немецкое выражение про какую-то там яйцекладующую свинью. Зачем делать в коде макароны если нужно только конечное число?
Аватара пользователя
Forward

Activity Tutorials Black
professional
professional
Сообщения: 337
Зарегистрирован: 03 мар 2008, 12:41
Награды: 3
Версия LabVIEW: 2010
Откуда: Кишинев
Контактная информация:

Re: Задача про ресурсы и процессы

Сообщение Forward »

Ну а если принципиально хочется соорудить еще один цикл или нужно иметь доступ к каждому шагу вышеописанного алгоритма, то можешь сделать так, или накуралесить более пугающий код.
Вложения
resouce2.vi
для 8.0
(18.28 КБ) 150 скачиваний
resource2.png
Последний раз редактировалось Forward 20 ноя 2008, 15:56, всего редактировалось 1 раз.
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Задача про ресурсы и процессы

Сообщение Eugen Graf »

Forward писал(а):
Mig29 писал(а):В том-то и дело, что циклом нужно и именно как я описал. Разностью сумм - это я уже делал...
Я никогда не был в Германии и по немецки нихренштейн, но тут я сразу всмопнил немецкое выражение про какую-то там яйцекладующую свинью. Зачем делать в коде макароны если нужно только конечное число?
Сори что не в тему.
Это называлось Eierlegende Wollmilchsau, что в переводе означает яйцекладущая шёрсто-молочная свинья.
Mig29
beginner
beginner
Сообщения: 23
Зарегистрирован: 29 окт 2008, 11:23
Версия LabVIEW: 8

Re: Задача про ресурсы и процессы

Сообщение Mig29 »

Офигеть! Forward спасибо огромное! Я и не думал, что там настолько всё запутано будет... думал, что максимум - цикл в цикле!
Аватара пользователя
Forward

Activity Tutorials Black
professional
professional
Сообщения: 337
Зарегистрирован: 03 мар 2008, 12:41
Награды: 3
Версия LabVIEW: 2010
Откуда: Кишинев
Контактная информация:

Re: Задача про ресурсы и процессы

Сообщение Forward »

Ну там и получается цикл в цикле.
Проще - это разность сумм элементов массива. А если ты хочешь один в один реализовать свой алгоритм - то это уже макароны. Хотя наверняка можно и проще. Это первое, что пришло мне в голову, попробуй оптимизировать.
Mig29
beginner
beginner
Сообщения: 23
Зарегистрирован: 29 окт 2008, 11:23
Версия LabVIEW: 8

Re: Задача про ресурсы и процессы

Сообщение Mig29 »

Кстати, ошибочка какая-то имеется в алгоритме :-|
Попробуй значения 10,8,6,5 и 7,3,6,4... должно получаться 9, а выводит 5...
Аватара пользователя
Forward

Activity Tutorials Black
professional
professional
Сообщения: 337
Зарегистрирован: 03 мар 2008, 12:41
Награды: 3
Версия LabVIEW: 2010
Откуда: Кишинев
Контактная информация:

Re: Задача про ресурсы и процессы

Сообщение Forward »

Ну да.. я там закинул ненужный инкремент:

Так а чем тебя не устраивает вычислять разность сумм элементов массива?
Вложения
r2.1.png
r2.1.png (6.11 КБ) 7153 просмотра
resource2.1.vi
(19.78 КБ) 147 скачиваний
Ответить

Вернуться в «Общие»