Войти
ПроектыФорумКонкурсы

Управление роботом. Миниконкурс. (7 стр)

Advanced: Тема повышенной сложности или важная.

Страницы: 1 2 3 4 5 6 7
#90
17:36, 7 янв. 2012

Mikle
Сделай всетки длл для обучения нейронки, тоже интересно поучаствовать.

#91
17:59, 7 янв. 2012

Adler
классно, молодец.

лол, почему мой робот - самый обдолбанный?

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

#92
18:09, 7 янв. 2012

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

#93
18:20, 7 янв. 2012

Merrewend
> Сделай, пожалуйста, версию без ограничения по времени. Смотрел бы и смотрел как
> робот кочевряжится.
Тут проблема в том, что через некоторое время точности float начнёт не хватать, начнутся дёрганья, чем дальше - тем сильнее.
susageP
> Сделай всетки длл для обучения нейронки, тоже интересно поучаствовать.
Сделаю следующее задание, всё будет.
Suslik
> лол, почему мой робот - самый обдолбанный?
А мой в начале убегает, и больше его не показывают :(

#94
18:22, 7 янв. 2012

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

Ну мне интересен именно этот метод. и если будут предоставлены методы для комфортного обучения с удовольствием поучаствую.

Mikle
> Сделаю следующее задание, всё будет.
только спроси какие методы, когда будешь делать:)

#95
18:28, 7 янв. 2012

Mikle
> А мой в начале убегает, и больше его не показывают :(
не переживай, и твой метод всё равно очень далёк от оптимального.

susageP
> Ну мне интересен именно этот метод. и если будут предоставлены методы для комфортного обучения с удовольствием поучаствую.
я гонял свою программу на вот таком коде:

    PROCESS_INFORMATION procInfo;
    STARTUPINFOW startInfo = { 0 };
    startInfo.cb = sizeof(startInfo);

    CreateProcess(TEXT("RCheck.exe"), 0, 0, 0, 0, 0, 0, 0, &startInfo, &procInfo);
    WaitForInputIdle(procInfo.hProcess, 100000);

    wchar_t className[1024];
    HWND hWnd = 0;
    hWnd = FindWindow(TEXT("ThunderRT6FormDC"), 0);

    wchar_t wndText[1024];
    int val = 0;
    do
    {
      GetWindowText(hWnd, wndText, 1024);
    }while(swscanf_s(wndText, TEXT("%d"), &val) != 1);
    
    while(!TerminateProcess(procInfo.hProcess, 0));
    return float(-val);
в принципе, работает. за час работы система жива, хотя окна мелькают с жуткой скоростью и пока программа работает ничего больше делать нельзя, так как фокус бешено скачет с окна на окно. но для обкатки разных методов обучения вполне подходит.
#96
18:29, 7 янв. 2012

Suslik
У тебя под конец есть момент, когда робот фактически бежит не прыгая. Если бы заставить его сразу так бежать - было бы, наверное, за 70000.

#97
18:34, 7 янв. 2012

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

#98
18:52, 7 янв. 2012

Suslik
Т.е. алгоритм такой что просто проверяет с текущего T до T+dT - расстояние при заданых силах, выбирает наибольшее расстояние - записывает в файл, и продолжает с той точки? Хитро однако =)

#99
19:54, 7 янв. 2012

Suslik
Вот так вроде не должно мигать, но я ещё не проверял.

    PROCESS_INFORMATION procInfo;
    STARTUPINFOW startInfo = { 0 };
    startInfo.cb = sizeof(startInfo);
    startInfo.dwFlags = STARTF_USESHOWWINDOW;   // (1)
    startInfo.wShowWindow = SW_HIDE;            // (2)

    CreateProcess(TEXT("RCheck.exe"), 0, 0, 0, 0, 0, 0, 0, &startInfo, &procInfo);
    WaitForInputIdle(procInfo.hProcess, 100000);

    wchar_t className[1024];
    HWND hWnd = 0;
    hWnd = FindWindow(TEXT("ThunderRT6FormDC"), 0);

    wchar_t wndText[1024];
    int val = 0;
    do
    {
      GetWindowText(hWnd, wndText, 1024);
    }while(swscanf_s(wndText, TEXT("%d"), &val) != 1);
    
    while(!TerminateProcess(procInfo.hProcess, 0));
    return float(-val);
Zefick
> Ну я так и понял, потому что библиотек нигде нет. А было бы неплохо хранить
> их в отдельной папке рядом и вызывать перед запуском.
Слишком опасно распространять и выполнять перед запуском такой ворох dll и exe.
> А так всё жестко зашито.
Это точно.
#100
20:59, 7 янв. 2012

fzr125
> Т.е. алгоритм такой что просто проверяет с текущего T до T+dT - расстояние при заданых силах, выбирает наибольшее расстояние - записывает в файл, и продолжает с той точки? Хитро однако =)
нет. если так считать, то робот быстро прыгнет вперёд(локальный минимум на период dt) и уткнётся носом в землю(локальный минимум на отрезке T + dt не является локальным минимумом на отрезке T + 2*dt).

Я на каждом шаге ищу периодическое решение, используя предыдущее решение как начальное приближение. Таким образом решение постоянно находится периодическое, но так как оно постоянно пересчитывается, оно периодическим, вообще говоря, не является. Если решение найти один раз и не пересчитывать, то через N-ное количество шагов оно "развалится", так как невозможно идеально точно предсказать поведение робота. Если решение искать не периодическое и/или не пересчитывать, то сходиться будет гораздо медленнее(уже не риалтайм). В описанном же подходе обычно находится вполне сносное решение уже по прошествии пары-тройки периодов(то есть около трёх секунд "попыток" пойти в реальном времени).

#101
15:27, 10 янв. 2012

GCC, с деф-файлом так и не заработало.
GCC 4.5.2, Code::Blocks.
Шаблон такой:

extern "C" __declspec(dllexport) void RTICK(robot *a) {
    
}

#102
18:03, 10 янв. 2012

nervous1025
> GCC, с деф-файлом так и не заработало.
  def-файл:

LIBRARY  "robot.dll"
EXPORTS
  RTICK = RTICK@4
  robot.c
__declspec(dllexport) void __stdcall RTICK(robot* R) {...}
  командная строка компиляции: gcc -o robot.dll robot.c robot.def -shared -s -O2 -Os
#103
18:30, 10 янв. 2012

nervous1025
В Code::Blocks в настройки проекта в опции линкера допиши
-Wl,--kill-at
-Wl,--def=robot.def

Страницы: 1 2 3 4 5 6 7
ПроектыФорумКонкурсы

Тема в архиве.