Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Задача с кубиками - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Задача с кубиками (Excel)
Задача с кубиками
w2den777 Дата: Пятница, 22.12.2017, 23:27 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
У меня есть 78 кубиков различной массы, (таблица из двух столбцов с номером кубика и его массой). Мне нужно распределить кубики в 13 кластеров, так что бы разница между массами кластеров была наиболее минимальна (то есть получить 13 таблиц, в каждой из которых есть номер и масса кубика).
 
Ответить
СообщениеУ меня есть 78 кубиков различной массы, (таблица из двух столбцов с номером кубика и его массой). Мне нужно распределить кубики в 13 кластеров, так что бы разница между массами кластеров была наиболее минимальна (то есть получить 13 таблиц, в каждой из которых есть номер и масса кубика).

Автор - w2den777
Дата добавления - 22.12.2017 в 23:27
китин Дата: Суббота, 23.12.2017, 08:17 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 7015
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
не вижу решения


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
Сообщениене вижу решения

Автор - китин
Дата добавления - 23.12.2017 в 08:17
Pelena Дата: Суббота, 23.12.2017, 10:28 | Сообщение № 3
Группа: Админы
Ранг: Местный житель
Сообщений: 19182
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
w2den777, если это Готовое решение, то приложите файл с решением. Если это вопрос, то перенесу тему в раздел ВОПРОСЫ ПО EXCEL, но думаю, что файл всё равно потребуется.


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщениеw2den777, если это Готовое решение, то приложите файл с решением. Если это вопрос, то перенесу тему в раздел ВОПРОСЫ ПО EXCEL, но думаю, что файл всё равно потребуется.

Автор - Pelena
Дата добавления - 23.12.2017 в 10:28
w2den777 Дата: Суббота, 23.12.2017, 11:11 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Готового решения нету, я думал что в этой теме как раз и подсказывают насчет готового решения,модератор пожалуйста перенесите тему.
 
Ответить
СообщениеГотового решения нету, я думал что в этой теме как раз и подсказывают насчет готового решения,модератор пожалуйста перенесите тему.

Автор - w2den777
Дата добавления - 23.12.2017 в 11:11
MCH Дата: Суббота, 23.12.2017, 14:17 | Сообщение № 5
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

w2den777, приложите файл с исходными данными
Также нужны дополнительные пояснения: в каждом кластере должно быть по 6 кубиков или может быть любым?
 
Ответить
Сообщениеw2den777, приложите файл с исходными данными
Также нужны дополнительные пояснения: в каждом кластере должно быть по 6 кубиков или может быть любым?

Автор - MCH
Дата добавления - 23.12.2017 в 14:17
w2den777 Дата: Воскресенье, 24.12.2017, 12:15 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
В каждом кластере ровно по 6 кубиков.
 
Ответить
СообщениеВ каждом кластере ровно по 6 кубиков.

Автор - w2den777
Дата добавления - 24.12.2017 в 12:15
MCH Дата: Воскресенье, 24.12.2017, 12:31 | Сообщение № 7
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Приложите файл с исхоными данными
В зависимости от данных могут быть разные решения
 
Ответить
СообщениеПриложите файл с исхоными данными
В зависимости от данных могут быть разные решения

Автор - MCH
Дата добавления - 24.12.2017 в 12:31
Светлый Дата: Воскресенье, 24.12.2017, 23:21 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1829
Репутация: 510 ±
Замечаний: 0% ±

Excel 2013, 2016
Как вариант не совсем оптимальной, но близкой к оптимальной линейной группировки - сортировка по убыванию и расположение списка змейкой. Если необходимо ещё более оптимально сгруппировать, можно попытаться вручную менять элементы в группах, сумма которых сильно отличается от среднего значения в разные стороны.
К сообщению приложен файл: gruppy.xlsx (12.0 Kb)


Программировать проще, чем писать стихи.
 
Ответить
СообщениеКак вариант не совсем оптимальной, но близкой к оптимальной линейной группировки - сортировка по убыванию и расположение списка змейкой. Если необходимо ещё более оптимально сгруппировать, можно попытаться вручную менять элементы в группах, сумма которых сильно отличается от среднего значения в разные стороны.

Автор - Светлый
Дата добавления - 24.12.2017 в 23:21
MCH Дата: Понедельник, 25.12.2017, 01:12 | Сообщение № 9
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Если формульный подход даёт недостаточно оптимальное решение, то нужно использовать макросы (в зависимости от исходных данных могут быть разные алгоритмы)
вариант решения по случайным данным формулами (предложенными Светлым) и найденное более точное решение макросами
К сообщению приложен файл: gruppy2.xlsx (14.4 Kb)
 
Ответить
СообщениеЕсли формульный подход даёт недостаточно оптимальное решение, то нужно использовать макросы (в зависимости от исходных данных могут быть разные алгоритмы)
вариант решения по случайным данным формулами (предложенными Светлым) и найденное более точное решение макросами

Автор - MCH
Дата добавления - 25.12.2017 в 01:12
MCH Дата: Понедельник, 25.12.2017, 08:25 | Сообщение № 10
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Еще один формульный вариант ("жадный" алгоритм)
К сообщению приложен файл: gruppy3.xlsx (16.0 Kb)
 
Ответить
СообщениеЕще один формульный вариант ("жадный" алгоритм)

Автор - MCH
Дата добавления - 25.12.2017 в 08:25
w2den777 Дата: Суббота, 30.12.2017, 19:13 | Сообщение № 11
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Спасибо! Жадный алгоритм работает! Если не сложно поясните что именно происходит в решении вариантом 2
 
Ответить
СообщениеСпасибо! Жадный алгоритм работает! Если не сложно поясните что именно происходит в решении вариантом 2

Автор - w2den777
Дата добавления - 30.12.2017 в 19:13
MCH Дата: Вторник, 02.01.2018, 12:32 | Сообщение № 12
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Принцип работы жадного алгоритма реализованного в 10 сообщении:
Сортируем массив с числами от большего к меньшему
Заполняем вначале первый элемент во всех строках последовательно наибольшими значениями, затем второй элемент каждой строки, при этом наибольшее значение помещаем туда, где накоплена наименьшая сумма, аналогично для 3го - 6го элемента.
Данный подход полностью повторяет размещение первого и второго элемента, также, как в варианте распределения змейкой, далее элементы распределяются по другому.
Не скажу, что данный вариант лучше, чем распределение змейкой (на случайных данных)

Хотелось бы все таки увидеть реальные Ваши данные, т.к. макросом можно распределить числа существенно лучше.
 
Ответить
СообщениеПринцип работы жадного алгоритма реализованного в 10 сообщении:
Сортируем массив с числами от большего к меньшему
Заполняем вначале первый элемент во всех строках последовательно наибольшими значениями, затем второй элемент каждой строки, при этом наибольшее значение помещаем туда, где накоплена наименьшая сумма, аналогично для 3го - 6го элемента.
Данный подход полностью повторяет размещение первого и второго элемента, также, как в варианте распределения змейкой, далее элементы распределяются по другому.
Не скажу, что данный вариант лучше, чем распределение змейкой (на случайных данных)

Хотелось бы все таки увидеть реальные Ваши данные, т.к. макросом можно распределить числа существенно лучше.

Автор - MCH
Дата добавления - 02.01.2018 в 12:32
InExSu Дата: Вторник, 02.01.2018, 23:12 | Сообщение № 13
Группа: Друзья
Ранг: Ветеран
Сообщений: 648
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
Привет!
макросом можно распределить числа существенно лучше

Надеюсь получилось ...
[vba]
Код
Option Explicit

Dim z, iRow, iCol, arr(), i, Номер

Sub ГазонЗасеян_РавноМерно()
' http://www.excelworld.ru/forum/2-36648-1
'распределить 78 кубикjd в 13 кластеров, так что бы разница между _
  массами кластеров была наиболее минимальна
    With ActiveSheet
        Range(.Cells(2, 4), .Cells(14, 15)).ClearContents
        z = .Cells(2, 1).CurrentRegion.Sort(.Cells(2, 2), xlAscending, Header:=xlYes)
        arr = .[a1].CurrentRegion.Value
        For iRow = 2 To 14
            For iCol = 4 To 14 Step 2
                If iRow Mod 2 = 0 Then
                    .Cells(iRow, iCol + 1) = МаксВес
                Else
                    .Cells(iRow, iCol + 1) = МинВес
                End If
                .Cells(iRow, iCol) = Номер
            Next
        Next
    End With
End Sub

Private Function МаксВес()
    МаксВес = 0    'пусть нет отрицательных чисел _
                   и вес отсортирован по возрастанию
    For i = UBound(arr) To LBound(arr) + 1 Step -1
        If arr(i, 2) <> "" Then
            МаксВес = arr(i, 2)
            arr(i, 2) = ""
            Номер = arr(i, 1)
            Exit For
        End If
    Next
End Function

Private Function МинВес()
    МинВес = 0    'пусть нет отрицательных чисел _
                  и вес отсортирован по возрастанию
    For i = LBound(arr) + 1 To UBound(arr) - 1
        If arr(i, 2) <> "" Then
            МинВес = arr(i, 2)
            arr(i, 2) = ""
            Номер = arr(i, 1)
            Exit For
        End If
    Next
End Function
[/vba]
К сообщению приложен файл: InExSu.xlsb (19.3 Kb)


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
 
Ответить
СообщениеПривет!
макросом можно распределить числа существенно лучше

Надеюсь получилось ...
[vba]
Код
Option Explicit

Dim z, iRow, iCol, arr(), i, Номер

Sub ГазонЗасеян_РавноМерно()
' http://www.excelworld.ru/forum/2-36648-1
'распределить 78 кубикjd в 13 кластеров, так что бы разница между _
  массами кластеров была наиболее минимальна
    With ActiveSheet
        Range(.Cells(2, 4), .Cells(14, 15)).ClearContents
        z = .Cells(2, 1).CurrentRegion.Sort(.Cells(2, 2), xlAscending, Header:=xlYes)
        arr = .[a1].CurrentRegion.Value
        For iRow = 2 To 14
            For iCol = 4 To 14 Step 2
                If iRow Mod 2 = 0 Then
                    .Cells(iRow, iCol + 1) = МаксВес
                Else
                    .Cells(iRow, iCol + 1) = МинВес
                End If
                .Cells(iRow, iCol) = Номер
            Next
        Next
    End With
End Sub

Private Function МаксВес()
    МаксВес = 0    'пусть нет отрицательных чисел _
                   и вес отсортирован по возрастанию
    For i = UBound(arr) To LBound(arr) + 1 Step -1
        If arr(i, 2) <> "" Then
            МаксВес = arr(i, 2)
            arr(i, 2) = ""
            Номер = arr(i, 1)
            Exit For
        End If
    Next
End Function

Private Function МинВес()
    МинВес = 0    'пусть нет отрицательных чисел _
                  и вес отсортирован по возрастанию
    For i = LBound(arr) + 1 To UBound(arr) - 1
        If arr(i, 2) <> "" Then
            МинВес = arr(i, 2)
            arr(i, 2) = ""
            Номер = arr(i, 1)
            Exit For
        End If
    Next
End Function
[/vba]

Автор - InExSu
Дата добавления - 02.01.2018 в 23:12
Светлый Дата: Вторник, 09.01.2018, 23:41 | Сообщение № 14
Группа: Друзья
Ранг: Старожил
Сообщений: 1829
Репутация: 510 ±
Замечаний: 0% ±

Excel 2013, 2016
Задача не давала мне покоя и я её все-таки решил формулами. Правда без итераций не обошлось и формулы не получились полностью протягиваемыми. Сильно оптимизировать не стал.
К сообщению приложен файл: gruppy4.xlsx (33.1 Kb)


Программировать проще, чем писать стихи.
 
Ответить
СообщениеЗадача не давала мне покоя и я её все-таки решил формулами. Правда без итераций не обошлось и формулы не получились полностью протягиваемыми. Сильно оптимизировать не стал.

Автор - Светлый
Дата добавления - 09.01.2018 в 23:41
w2den777 Дата: Среда, 10.01.2018, 19:30 | Сообщение № 15
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Приветствую! Еще раз благодарю Вас за помощь! Вставил свои данные, но gruppy4.xls не работает. Пока что минимальная дисперсия которую удалось получить составляет около 180 из второго алгоритма в gruppy3.xls. Прикладываю свои данные.
up

Понравился макрос InExSu он шикарно работает и главное оперирует номерами кубиков, это облегчает сборку. Разница между самой большой и самой маленькой матрицей очень маленькая, считаю данный просто прекрасным!

Практический смысл задачи не менее интересен чем ее решение, задача собрать максимально эффективную батарею для электровелосипеда. Дело в том, что ячейки нужно параллелеить так, что бы разница между 13 сборками из 6 запараллеленых элементов была минимальна, так как контроллер отключает всю батарею когда одна из 13 сборок просаживается ниже 3 вольт. "Взвешивание" батареек, то есть замер их емкости долгий процесс и был закончен только сегодня.
К сообщению приложен файл: 2558025.xlsx (8.8 Kb)


Сообщение отредактировал w2den777 - Среда, 10.01.2018, 19:50
 
Ответить
СообщениеПриветствую! Еще раз благодарю Вас за помощь! Вставил свои данные, но gruppy4.xls не работает. Пока что минимальная дисперсия которую удалось получить составляет около 180 из второго алгоритма в gruppy3.xls. Прикладываю свои данные.
up

Понравился макрос InExSu он шикарно работает и главное оперирует номерами кубиков, это облегчает сборку. Разница между самой большой и самой маленькой матрицей очень маленькая, считаю данный просто прекрасным!

Практический смысл задачи не менее интересен чем ее решение, задача собрать максимально эффективную батарею для электровелосипеда. Дело в том, что ячейки нужно параллелеить так, что бы разница между 13 сборками из 6 запараллеленых элементов была минимальна, так как контроллер отключает всю батарею когда одна из 13 сборок просаживается ниже 3 вольт. "Взвешивание" батареек, то есть замер их емкости долгий процесс и был закончен только сегодня.

Автор - w2den777
Дата добавления - 10.01.2018 в 19:30
Светлый Дата: Четверг, 11.01.2018, 12:51 | Сообщение № 16
Группа: Друзья
Ранг: Старожил
Сообщений: 1829
Репутация: 510 ±
Замечаний: 0% ±

Excel 2013, 2016
С реальными данными вообще махом посчитала. Дисперсия=0,25640576 в gruppy4.xls
Проблема в том, что есть одинаковые значения. Надо к каждому значению прибавить номер строки, делённый на 1000000
Код
=B2+A2%%%

В этом файле формулы немного упростил. Если результата сразу не выдаст, можно продолжить расчёт (F9) или сделать сброс и снова расчёт в жёлтой ячейке.
Для удобства дописал номера элементов.
К сообщению приложен файл: 2558025_1.xlsx (18.7 Kb)


Программировать проще, чем писать стихи.
 
Ответить
СообщениеС реальными данными вообще махом посчитала. Дисперсия=0,25640576 в gruppy4.xls
Проблема в том, что есть одинаковые значения. Надо к каждому значению прибавить номер строки, делённый на 1000000
Код
=B2+A2%%%

В этом файле формулы немного упростил. Если результата сразу не выдаст, можно продолжить расчёт (F9) или сделать сброс и снова расчёт в жёлтой ячейке.
Для удобства дописал номера элементов.

Автор - Светлый
Дата добавления - 11.01.2018 в 12:51
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Задача с кубиками (Excel)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!