|
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
|
||||||
30 вложенных циклов19.10.2019, 10:15. Показов 3800. Ответов 41
Метки нет (Все метки)
Добрый день! Помогите, пожалуйста! Решаю задачу. В ней у меня фигурируют 30 параметров. Например, нахожу их сумму (на самом деле нет, но неважно). Мне надо подставлять разные значения этих параметров. Реализовала на C++ в виде 30 циклов. В каждом цикле варьирую один из параметров. Привожу код на C++ (то, что в коде индексы вручную прописаны не нужно обращать внимание. Там всегда такая размерность будет. И там не сумма на самом деле ищется). Недавно появилась объективная необходимость перевести эту программу на Python. А там можно вкладывать только 20 циклов (за это отвечает константа CO_MAXBLOCKS в файле code.h. Посоветуйте, пожалуйста, что лучше: 1) увеличить значение этой константы в исходниках CPython (как-то не хотелось бы), 2) как-то изменить алгоритм (и сразу как, если можно, хоть на C++, хоть на Python, хоть на псевдокоде.
0
|
||||||
| 19.10.2019, 10:15 | |
|
Ответы с готовыми решениями:
41
Сравнение двух массивов без вложенных циклов
Упрощение вложенных циклов |
|
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
|
|
| 19.10.2019, 11:24 [ТС] | |
|
vantfiles, да, это количество узлов сетки. Ну от 1 до 15 примерно буду задавать.
0
|
|
|
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
|
|
| 19.10.2019, 12:15 [ТС] | |
|
vantfiles, вот мне предлагали. А я не совсем понимаю, как это сделать
0
|
|
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
| 19.10.2019, 12:18 | |
|
Simply me, вчитываться лень. Приведи код к такому виду, чтобы его можно было скопировать, вставить и чтобы он при этом запускался и корректно работал. Сейчас для этого не хватает как минимум объявления используемых переменных. И, конечно, случай не должен быть вырожденным — нет смысла считать сумму нулей.
0
|
|
|
|
|||||||
| 19.10.2019, 12:21 | |||||||
1
|
|||||||
|
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
|
|
| 19.10.2019, 12:26 [ТС] | |
|
vantfiles, попробую
Добавлено через 1 минуту 0x10, там чтобы работало, надо lp_solve установить, его библиотеку подключить и экзешник его к коду скопировать.
0
|
|
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
||
| 19.10.2019, 12:27 | ||
|
Еще не понимаю, почему изменение индекса от 0 до 29 нельзя оформить как цикл. Аналогичный вопрос к вычислению суммы — выглядит как развернутый цикл.
0
|
||
|
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
|
|
| 19.10.2019, 12:28 [ТС] | |
|
Ну хотя уберу всё это, выложу сюда только про циклы, но чтобы работало. И еще я там иногда явно значения прописываю. Я знаю, что так не пишут. Просто я этот код никому не собираюсь показывать, это мне для диссера, чтобы немного автоматизировать.
0
|
|
|
|
||
| 19.10.2019, 12:39 | ||
|
Добавлено через 4 минуты Ручками индексы считать тоже не то - общий цикл имеет 15^30 итераций, или 1,9175105923288408666849136352539e+35 поэтому непонятно на чем сделать внешний цикл... PS: кстати, не очень понятно на каком это вообще компе считается...
0
|
||
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
| 19.10.2019, 12:52 | |
|
Simply me, другая мысль. mesh_num можно рассматривать как 30-разрядное число в системе счисления по основанию grid_count. Тогда для него можно написать функцию increment.
1
|
|
|
фрилансер
6449 / 5643 / 1129
Регистрация: 11.10.2019
Сообщений: 15,025
|
|
| 19.10.2019, 12:54 | |
|
Simply me, допустим, grid_count==16. Параметров N. В итоге нужно перебрать grid_count^N (что, кстати, довольно долго будет делаться). Заводим себе двоичную переменную counter длиной в N тетрад (N/2 байтов).
В одном единственном цикле при помощи инкремента перебираются все значения counter от 0 до grid_count^N В начале цикла по двоичному коду каждой тетрады counter определяется одно из 16 состояний каждого из N параметра. Согласно текущему набору параметров вычисляется функция counter можно организовать в виде массива uint64_t, инкрементировать их как одно большое многобитное число несложно
1
|
|
|
|
||
| 19.10.2019, 12:56 | ||
|
1
|
||
|
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
|
||||||
| 19.10.2019, 13:13 [ТС] | ||||||
|
Да, наверное, лучше весь код приведу, а то не все советы понимаю) Вот часть кода, которая запустится и без библиотек lp и которая формирует файлы lp. m^n файлов, где m - количество узлов сетки, а n - количество варьируемых параметров (незакомментированных циклов for). Поэтому все циклы for можно раскомментировать, только если задать один узел сетки. Для двух узлов сетки, если все раскомментировать, получится 2^30 модели. Когда создадутся все модели, в консоль выведется "All".
И я знаю, что входные матрицы можно задать через консоль, в таблице в приложении gui или считать из файла. Просто пока руки не доходят)
0
|
||||||
|
Модератор
3133 / 2280 / 469
Регистрация: 26.03.2015
Сообщений: 8,876
|
|||||||
| 19.10.2019, 14:45 | |||||||
1
|
|||||||
|
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
|
|
| 19.10.2019, 17:19 [ТС] | |
|
Shamil1, спасибо. Но я немного не поняла эту конструкцию. Почему в конце точка с запятой? Тело у этого цикла как у меня нужно оставить?
Добавлено через 19 минут А вообще мне, наверное, саму идею придется менять. Раньше я упражнялась примерно на 3 параметрах и 5 узлах (125 моделей). Тут даже вручную можно открыть все файлы, сгенированные lpsolve для каждой модели, найти минимальное значение минимизируемой величины кси и при каких параметрах. У меня это было автоматизировано. Я хотела перевести на питон, потому что мне на питоне было бы легче сделать удобнее структуру выходного файла, чтобы было легче анализировать параметры при минимальных кси. Но получается, если варьировать все 30 параметров даже при двух узлах получится миллиард моделей. И, например, из них у 100 тыс минимальное кси. При любой структуре файла с кси и параметрами, 100 000 файлов неудобно анализировать. К тому же, после каждого запуска привыкла удалять все файлы с моделями и результатами. А так получается 2 млрд файлов удалять. Нужен какой-то другой алгоритм найти решение в этом 30мерном кубике интервалов.
0
|
|
|
фрилансер
6449 / 5643 / 1129
Регистрация: 11.10.2019
Сообщений: 15,025
|
|
| 19.10.2019, 17:24 | |
|
Simply me, генетический алгоритм попробуй, если целевая функция известна
1
|
|
|
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
|
||||||
| 19.10.2019, 20:16 [ТС] | ||||||
|
Алексей1153, прочитала про генетический алгоритм разные источники, но пока не очень представляю, как к моей задаче приложить. Вы не могли бы на питоне или c++ немного код набросать, не так, чтоб прям компилилось и результат выдавало, а примерно? Я отлажу. Вместо проверки критерия можно так писать:
0
|
||||||
| 19.10.2019, 20:16 | |
|
Помогаю со студенческими работами здесь
20
Прерывание вложенных циклов
Оптимизация 2х вложенных циклов
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во
всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
|