powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Нужна ваша поддержка в поиске оптимального значения "Метод отжига"
17 сообщений из 17, страница 1 из 1
Нужна ваша поддержка в поиске оптимального значения "Метод отжига"
    #40131511
life0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, у меня с C# небольшой опыт, вот столкнулся с такой задачей и не знаю как к ней подступится ((

- каждый день нужно обрабатывать большой объем данных около 100 000 строк
- в каждой строке содержится несколько параметров (их количество может варьироваться)
- каждая строка с параметрами отправляются на удаленный сервер, который в свою очередь возвращает число (положительное или отрицательное)
- ответ сервера 1-2 секунд следовательно этот процесс занимает минимум 30 часов

Идея в том чтобы за относительно небольшое количество итераций найти максимально положительное значение
Я слышал что есть, "Метод отжига" - Он представляет собой упорядоченный случайный поиск оптимума целевой функции.



В данном примере данных, в каждой строке три параметра и четвертый это результат (к примеру 30.89, 24.07)

-25;40;18;30.89
-25;40;17;30.89
-25;40;16;24.07
-25;40;15;24.07
-25;40;14;19.94
-25;40;13;19.94
-25;39;25;-26.57
-25;39;24;26.57
-25;39;23;25.33

В приложении файл с несортированными данными, буду благодарен за любую помощь или подсказку куда копать

Код: c#
1.
2.
3.
4.
5.
6.
string[] lines                          = System.IO.File.ReadAllLines("import.csv");
List<double[]> data_list                = new List<double[]>();
CultureInfo culture_info                = new CultureInfo("en-US");

foreach (string line in lines)
    data_list.Add(line.Split(';').Select(n => Convert.ToDouble(n, culture_info)).ToArray());
...
Рейтинг: 0 / 0
Нужна ваша поддержка в поиске оптимального значения "Метод отжига"
    #40131533
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
life0n
- каждая строка с параметрами отправляются на удаленный сервер, который в свою очередь возвращает число (положительное или отрицательное)
- ответ сервера 1-2 секунд
А сервер не умеет строки параллельно обрабатывать?
...
Рейтинг: 0 / 0
Нужна ваша поддержка в поиске оптимального значения "Метод отжига"
    #40131536
life0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

нет, в конкретном случае, только один запрос за один раз
...
Рейтинг: 0 / 0
Нужна ваша поддержка в поиске оптимального значения "Метод отжига"
    #40131550
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
life0n,
ты хочешь получить максимальное значение без отправки его на сервер, имея только входные данные?
...
Рейтинг: 0 / 0
Нужна ваша поддержка в поиске оптимального значения "Метод отжига"
    #40131554
life0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vb_sub,

без отправки на сервер не получится, так как отправляя на сервер одни и те же данные входных параметров, в разные дни, получу разные результаты в ответ

идея такая,
1. к примеру изменили параметр номер один, цена не увеличилась тогда оставляем его в покое пока,
2. пробуем изменить второй параметр, тут значение с сервера к примеру изменилось в большую сторону (значит этот параметр сейчас теплый),
3. тогда продолжаем изменять второй параметр до тех пор пока возвращаемый результат будет будет возвращаться больше предыдущего,
4. как только сервер вернул значение меньше предыдущего, переключаемся на следующий параметр

в итоге можем найти наибольшее значение с относительно небольшим количеством итераций, но это теория
а как на практике без понятие ))

а в примере я привел исходные данные параметров с ответами сервера, только для тестирования
...
Рейтинг: 0 / 0
Нужна ваша поддержка в поиске оптимального значения "Метод отжига"
    #40131563
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
life0n,
я правильно понимаю, что у тебя функция с группой входных параметров и с одним выходным.
Эта функция реализована на сервере и на клиенте ты её реализовать не можешь, потому что она видать питается какими-либо серверными данными, которые на клиенте не доступны.
Ты хочешь заменить прогонку всех данных через эту функцию на сервере на функцию, которая будет давать аналогичный результат с определенной погрешностью, но с меньшим количеством обращений к серверу.
life0n к примеру изменили параметр номер один, цена не увеличилась тогда оставляем его в покое пока,
Цена я так понимаю у тебя выходной параметр?
life0nпробуем изменить второй параметр, тут значение с сервера к примеру изменилось в большую сторону (значит этот параметр сейчас теплый)
Ты здесь подразумеваешь линейную корреляцию или может быть какой-либо другой?
Тут сразу вопрос- каков шаг изменения параметра? Тут тоже скорее всего необходимо будет применить какой-либо алгоритм нахождения этого шага. Если буде константа, то сильно упростится этот пункт.
Каким образом необходимо сагрегировать все входные данные, чтобы получить этот второй параметр? Ведь в каждой строке он разный.
...
Рейтинг: 0 / 0
Нужна ваша поддержка в поиске оптимального значения "Метод отжига"
    #40131621
life0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vb_sub,

Доброе утро!

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

авторЦена я так понимаю у тебя выходной параметр?
цена это выходной параметр


авторТут сразу вопрос- каков шаг изменения параметра? Тут тоже скорее всего необходимо будет применить какой-либо алгоритм нахождения этого шага. Если буде константа, то сильно упростится этот пункт.
Каким образом необходимо сагрегировать все входные данные, чтобы получить этот второй параметр? Ведь в каждой строке он разный.
Шаг тут не нужен, так как все входные параметры известны заранее,
тот большой массив данных и есть уже сгенерированные входные параметры с нужным шагом

авторТы здесь подразумеваешь линейную корреляцию или может быть какой-либо другой?
На сколько я понимаю вопрос может быть только линейная
...
Рейтинг: 0 / 0
Нужна ваша поддержка в поиске оптимального значения "Метод отжига"
    #40131632
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
life0n,
-25;40;18;30.89
y=f(x,y,z)
30.89=f(-25,40,18)
Так?
...
Рейтинг: 0 / 0
Нужна ваша поддержка в поиске оптимального значения "Метод отжига"
    #40131635
life0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vb_sub,

Совершенно верно
...
Рейтинг: 0 / 0
Нужна ваша поддержка в поиске оптимального значения "Метод отжига"
    #40131639
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
life0n,
life0n2. пробуем изменить второй параметр, тут значение с сервера к примеру изменилось в большую сторону (значит этот параметр сейчас теплый),
В случае с 30.89=f(-25,40,18)
второй параметр это 40.
Его нужно изменить и посмотреть, изменится ли 30.89.
То есть нужно вместо 40 подставить 41, или 40.0000005 и посмотреть значение выходной функции. Как определить этот шаг наращивания?
life0nНа сколько я понимаю вопрос может быть только линейная
Квадратичная, логарифмическая, экспоненциальная.
...
Рейтинг: 0 / 0
Нужна ваша поддержка в поиске оптимального значения "Метод отжига"
    #40131644
life0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vb_sub,

авторВ случае с 30.89=f(-25,40,18)
второй параметр это 40.
Его нужно изменить и посмотреть, изменится ли 30.89.
То есть нужно вместо 40 подставить 41, или 40.0000005 и посмотреть значение выходной функции. Как определить этот шаг наращивания?

именно так, изменить второй параметр и посмотреть изменится ли 30.89 в большую сторону

шаг искать не нужно, просто подставлять данные из списка параметров

Вот эти параметры уже с учетом нужного шага
-25;40;18
-25;40;17
-25;40;16
-25;40;15
-25;40;14
-25;40;13
-25;39;25
-25;39;24
-25;39;23

к примеру, мы поменяли второй параметр (40) к нам вернулось значение больше (30.89) следовательно этот параметр влияет на увеличение возвращаемого значения, следующий шаг, нужно найти в списке параметров которые еще не отправляли на сервер строку со значением второго параметра больше или меньше (40), и продолжать это делать до тех пор пока этот параметр влияет на увеличение возвращаемого значение, если пробовать изменить к примеру третий параметр

надеюсь понятно объяснил ))
...
Рейтинг: 0 / 0
Нужна ваша поддержка в поиске оптимального значения "Метод отжига"
    #40131660
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
life0n,
в качестве базисного значения(то с каким нужно сравнивать- уменьшилось оно или увеличилось) выходного параметра какую строку данных берем?
...
Рейтинг: 0 / 0
Нужна ваша поддержка в поиске оптимального значения "Метод отжига"
    #40131664
life0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vb_sub,

за базис для параметров берем первую строку параметров в списке (то значение которое вернет удаленный сервер)

благодарю
...
Рейтинг: 0 / 0
Нужна ваша поддержка в поиске оптимального значения "Метод отжига"
    #40131871
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
const string filePath = "import.csv";
var random = new Random();

await ReadCsvAsync(filePath);

/// <summary>
/// Чтение csv-файла
/// </summary>
async Task ReadCsvAsync(string filepath)
{
    byte cnt = 0;
    float[] arr;
    float[] basic;//базисный массив значений, с которым будем сравнивать изменяя значения
    int columnCount=default;//количество входных параметров+выходного
    bool[] results=default;//массив булевых значений, в котором храним результаты, холодные ли прараметры или нет. Индекс совпадает с индексом исходного массива данных

    foreach (string line in await File.ReadAllLinesAsync(filepath))
    {
        string[] columns = line.Split(';');
        cnt++;
        if (cnt==1)// считываем первую строку, чтобы определить сколько входных переменных и чтобы запомнить базисные значения
        {
            //определяем сколько столбцов присутствует в строке, чтобы определить входные и выходной параметры
            
            columnCount = columns.Length;
            basic = new float[columnCount];
            results= new bool[columnCount];

            for (int i = 0; i < columnCount; i++)
            {
                if (float.TryParse(columns[i], out var parsed))
                    basic[i] = parsed;
                //изначально нужно проверять все параметры на "холодность"
                results[i] = false;
            }
        }
        else
        {
            //проверяем "теплый" ли параметр или "холодный"
            for (int i = 0; i < columnCount; i++)
            {
                if (!results[i])//проверяем только те параметры, которые "холодные"
                {
                    if (float.TryParse(columns[i], out var parsed))
                    {
                        var serverResponse = ServerResponse(parsed);
                        if (serverResponse)// параметр "теплый"
                        {
                            results[i] = true;
                        }
                    }
                }
            }
        }
    }
    Console.WriteLine(string.Join(",", results));
}


/// <summary>
/// Эмулируем ответ с сервера-отправляем значение параметра и получаем ответ- увеличился ли выходной параметр
/// </summary>
 bool ServerResponse(float param)
   =>  random.Next(2) == 1;
...
Рейтинг: 0 / 0
Нужна ваша поддержка в поиске оптимального значения "Метод отжига"
    #40131939
life0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vb_sub,

спасибо огромное!!!!!!!
это не совсем та логика которую имел ввиду, но думаю я смогу докрутить уже до ума
как мне вас отблагодарить?
...
Рейтинг: 0 / 0
Нужна ваша поддержка в поиске оптимального значения "Метод отжига"
    #40132049
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
life0n,
рад что смог помочь.
...
Рейтинг: 0 / 0
Нужна ваша поддержка в поиске оптимального значения "Метод отжига"
    #40132054
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
life0n
vb_sub,

спасибо огромное!!!!!!!
это не совсем та логика которую имел ввиду, но думаю я смогу докрутить уже до ума
как мне вас отблагодарить?


чтобы нас отблагодарить пишите здесь на вопросы юзеров "Обратитесь к <xxx>, он реально помог мне, отжёг". Тогда и вы, и благодаруемый будут иметь иммунитет от забанивания как минимум.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Нужна ваша поддержка в поиске оптимального значения "Метод отжига"
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (8): Анонимы (5), Yandex Bot, Bing Bot 1 мин., CerebroSQL 4 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]