Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 122 След.
Задача коммивояжера: найти минимальный путь (задача коммивояжера) из точки 0 в точку 0, жадный алгоритм формулами Эксель
 
Жадина на формулах во вложении

ЗЫ: Название городов может быть любым, но одинаковым как в строках так и в столбцах
Задача коммивояжера: найти минимальный путь (задача коммивояжера) из точки 0 в точку 0, жадный алгоритм формулами Эксель
 
Решение "жадным" алгоритмом дает такой путь:
Путь: 0-3-6-7-11-12-1-4-2-8-13-14-9-10-5-0
Длина: 125+131+298+174+120+468+81+217+148+474+665+70+152+135+366 = 3624
Но он не является оптимальным
Оптимальное решение для задачи коммивояжера не находится формулами

Если нужен жадный алгоритм (не оптимальный), то его можно реализовать на формулах, либо более продвинутые - тогда макросами
Есть варианты реализации на VBA здесь
Изменено: MCH - 25 авг 2020 13:24:30
Задача коммивояжера: найти минимальный путь (задача коммивояжера) из точки 0 в точку 0, жадный алгоритм формулами Эксель
 
Решение для данной задачи (можно и в обратную сторону):
Путь: 0-12-11-7-1-4-2-8-13-6-3-14-9-10-5-0
Длина: 428+120+174+294+81+217+148+474+337+131+187+70+152+135+366 = 3314

Цитата
fina kul написал:
т.е. это жадный алгоритм.
Жадный алгоритм, как правило, не дает оптимального решения
Задачу коммивояжера для небольшого количества городов (как в данном случае) можно решить перебором, динамическим программированием, МВиГ и найти точное решение.
Для большего количества городов уже нужны эвристики и алгоритмы приближенного решения (генетические, муравьиных колоний, имитации отжига, различные оптимизации типа 2opt, 3opt и др.)
Жадный алгоритм можно реализовать на формулах, остальные методы сложнее, и формулами не решаются
[ Закрыто] Как правильно составить формулу с интерполяцией
 
Как то так
Подбор цифр отвечающий нескольким параметрам
 
Автоматизировал "поиск решения" макросом, попробуйте запустить
VBA. Вычисление факториала типа n!/m!(n-m)!
 
Тоже писал свою функцию для подсчета сочетаний, чтобы уйти от WorksheetFunction.Combin():
Код
Function MyCombin(ByVal n As Long, ByVal m As Long) As Double
    Dim i As Long, p As Double
    If m > n Or m < 0 Then Exit Function
    If m > n - m Then m = n - m
    p = 1
    For i = 1 To m
        p = p * n / i
        n = n - 1
    Next i
    MyCombin = p
End Function

Работает относительно быстро, нет реального расчета факториалов (не возникает переполнения при n > 170)
Выборка для формулы конкретных цифр из числа, находящего в одной ячейке
 
Цитата
БМВ написал:
лишнее убрать
Нет, так не должно сработать,
А вот за счет ПРАВБ можно сократить на пару символов:
Код
=-ПРАВБ(СУММ(-ПСТР(B3;{1:3:5:7}+{0;0;1};1);-(ПСТР(B3;{1:3:5:7};1)-4>0)))=0

можно и так, но короче не стало:
Код
=-ПРАВБ(СУММ(ПСТР(B3;{1:3:5:7}+{0;0;1};1)+(ПСТР(B3;{1:3:5:7};1)-4>0)/3))=0
Выборка для формулы конкретных цифр из числа, находящего в одной ячейке
 
есть формула на 76 знаков:
Код
=ОСТАТ(СУММ(-ПСТР(B3;{1:3:5:7}+{0;0;1};1);-(--ПСТР(B3;{1:3:5:7};1)>4));10)=0
Выборка для формулы конкретных цифр из числа, находящего в одной ячейке
 
Еще вариант:
Код
=ОСТАТ(B3+СУММ((-ПСТР(0&B3;{1:3:5:7}+{0;1};1)<0)*(ОСТАТ(ПСТР(0&B3;{1:3:5:7}+{0;1};1)*{1;2}-1;9)+1));10)=0

или даже так:
Код
=ОСТАТ(СУММ((-ПСТР(B3;{1:3:5:7}+{0;1};1)<0)*(ОСТАТ(ПСТР(B3;{1:3:5:7}+{0;1};1)*{2;1}-1;9)+1));10)=0
поиск оптимального состава в спортивном fantasy с помощью надстройки "поиск решения
 
"Поиск решения", линейная модель, считает быстро
Сравнение массивов числовых данных на степень похожести, найти ряд данных, наиболее близкий к расчётным
 
Вариант на базе квадратичного отклонение, чем меньше значение, тем лучше:
Код
=КОРЕНЬ(СУММКВРАЗН($A5:$A114;B5:B114)/СЧЁТ($A5:$A114))
VBA. Реализация Таблицы сложения Узоровой
 
Попробуйте такой код, возможно повторений будет меньше
Код
Sub mysum2()
    Dim i As Long, j As Long, txt As String
    Randomize
    For j = 1 To 9 Step 2
        For i = 1 To 50
            txt = fSum(0, 9, 1, 10, txt)
            Cells(i, j) = txt
    Next i, j
End Sub

Function fSum(min1 As Long, max1 As Long, min2 As Long, max2 As Long, Optional t2 As String = "") As String
    Dim znak As Long, s As Long, r1 As Long, r2 As Long, t1 As String
    Do
        r1 = Int(Rnd * (max1 - min1 + 1) + min1)
        r2 = Int(Rnd * (max1 - min1 + 1) + min1)
        znak = Int(Rnd * 2)
        If znak = 0 Then s = r1 - r2 Else s = r1 + r2
        t1 = r1 & IIf(znak = 0, " - ", " + ") & r2 & " ="
    Loop While s < min2 Or s > max2 Or t1 = t2
    fSum = t1
End Function
Изменено: MCH - 24 июл 2020 15:58:47
Получить все взможне варианты объединения букв из 5 столбцов
 
Ну тогда можно было бы на макросах сделать: https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=65018
Также в "приемах" есть подобный пример: https://www.planetaexcel.ru/techniques/7/7203/
Получить все взможне варианты объединения букв из 5 столбцов
 
А разве не проще с доп.столбцами и доп. вычислениями сделать?
и реализовать легче и править и т.п.
Круговое распределение по потребности, Распределение значения между субъектами согласно потребности
 
Цитата
GAMULA написал:
не совсем. в Вашем файле 102 стоит как бы рандомно
Ну тогда так
Круговое распределение по потребности, Распределение значения между субъектами согласно потребности
 
Решение формулой в желтых ячейках
при условии, что потребность отсортирована по убыванию
Проблема нелинейности транспортной задачи при поиске решения
 
Нелинейность модели из за округления количества машин
Посмотрите немного измененную модель, где распределяем автомобили
Такую задачу можно свести к линейному методу
Изменено: MCH - 17 июл 2020 14:26:12
Курсы пересчёта валюты
 
Не округляйте курс валюты
45896,25*70,1784609853746 = 3220928,19
Заполнение случайных ячеек в выбранном диапазоне
 
Решение макросом
Изменено: MCH - 8 июл 2020 08:34:09
Как отсортировать 5 миллионов строк?
 
Цитата
Jack Famous написал:
Проблемы: сортировка некорректная (даже не учитывая текст после последнего слэша)
Это я косячнул, хотел немного ускорить быструю сортировку, добавил сортировку вставками на коротких участках, реализовал криво - исправляюсь
Вложение в сообщении #71 обновил
С текстом не понятно, как нужно сортировать - после чисел?
Как отсортировать 5 миллионов строк?
 
Jack Famous,
А что на счет скорости, как отрабатывает код, если не принимать во внимание текстовое значение?
Как отсортировать 5 миллионов строк?
 
Цитата
bedvit написал:
Можно собрать и проверить.
Сделал сортировку под текущую задачу
Ищет число после последнего "/", если там текст, то принимает значение за 0
Значения сортируются как числа: 100 > 20
Скачивает текстовый файл по блочно по 10 млн. строк, каждый блок сортируется быстрой сортировкой, затем объединяются путем слияния файлов (сортировкой слияния)
Реализовано на FB, версия 64bit работает чуть быстрее 32bit на этапе сортировки, дисковые операции очень медленные
Вместо тестового файла "File.txt" подставьте рабочий файл
Изменено: MCH - 30 июн 2020 22:11:01 (Заново загрузил файл)
Как отсортировать 5 миллионов строк?
 
В свое время реализовывал сортировку слиянием, где текстовый файл разбивался на блоки, каждый первоначальный блок который влезает в память сортировался быстрой сортировкой, затем блоки сортировались слиянием
Под текущую задачу нужно менять код (вырезать хвост и по нему делать сравнение), но метод интересен тем, что не ограничен в размере файла (количестве элементов), можно и несколько гигабайт отсортировать, самым медленным здесь будут дисковые операции.
Реализовано на Freebasic (легко перевести на VBA)

Есть генератор случайных строк (задаем количество случайных элементов) и сама сортировка, см. вложение
По скорости сортировка получилась не очень быстрой, но может кому нибудь пригодиться
Расчет итогового материала с учетом раскроя при фиксированной длине базового изделия
 
Есть готовое решение: http://www.excelworld.ru/forum/3-21304-1
Пример расчета во вложении
Изменено: MCH - 23 июн 2020 10:22:21
Если 1-я цифра числа отлична от 0, взять в расчет ее, иначе взять 2-ю цифру
 
А так не подойдет?
Код
=A2-2*ЛЕВБ(--A1)
Разбить сумму по ячейкам целыми числами, чтобы произведение было максимально близко к самой сумме
 
Решение через UDF (два варианта), работает не очень быстро для большого кол-ва ячеек, поэтому часть формул перевел в значения
Базируется на решении из задачи про кровлю
Изменено: MCH - 11 июн 2020 15:57:48
Найти комбинацию в матрице
 
Grantorino, можете обозначить исходную задачу (вариантов транспортных задач достаточно много)
Может быть найдется альтернативное решение, в т. ч. через "Поиск решения" или другим способом
Опишите исходную задачу, с указанием реальных данных
График изготовления деталей по сменам
 
Как то так
Заменить буквы числовыми значениями и получить сумму
 
Цитата
Степкина написал:
А как получить промежуточный числовой код слова из которого мы получаем сумму?
Зачем нужно промежуточное число, если потом все равно сумму считаем?
=СУММПРОИЗВ(10^(ДЛСТР(B1)-СТРОКА(ДВССЫЛ("1:"&ДЛСТР(B1))))*(ОСТАТ(ПОИСК(ПСТР(B1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(B1)));1);"абвгдеёжзийклмнопрстуфхцчшщъыьэюя")-1;9)+1))

Цитата
Hugo написал:
А зачем это всё?
Скорее всего нумерология, ссылку на формулы buchlotnik уже давал
Изменено: MCH - 18 май 2020 14:00:35
Заменить буквы числовыми значениями и получить сумму
 
=СУММПРОИЗВ(ОСТАТ(ПОИСК(ПСТР(B1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(B1)));1);"абвгдеёжзийклмнопрстуфхцчшщъыьэюя")-1;9)+1)
Изменено: MCH - 18 май 2020 13:34:58
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 122 След.
Наверх