Есть необходимоть написать искуственный интеллект
Есть желание написать на C / Pascal / Basic подобном языке программирования, а не мучать матрицы, ссписки и прочую муру
Есть необходимость использовать этот AI в программе на C++
Есть желание не вшивать в программу и не писать dll-ками а использовать какой нибудь скрипт, например те же Java и VB
Чё делать есть прога должна работать на 98/Me/NT/2K/XP (так что Windows Scripting Host накрылся)
Имеется ввиду именно логика а не обработка данных и предопределённое поведение так что SQL подобные языки с конструкциями
SELECT solution FROM expirience WHERE situation = currentsituation
не тянут
Ответы типа "А не написать ли тебе мужик компилятор/интепретатор такого хорошего языка ка Tufta++" не принимаются !!! типа мне лень
Здравствуйте adontz, Вы писали:
A>Есть необходимоть написать искуственный интеллект A>Есть желание написать на C / Pascal / Basic подобном языке программирования, а не мучать матрицы, ссписки и прочую муру A>Есть необходимость использовать этот AI в программе на C++ A>Есть желание не вшивать в программу и не писать dll-ками а использовать какой нибудь скрипт, например те же Java и VB A>Чё делать есть прога должна работать на 98/Me/NT/2K/XP (так что Windows Scripting Host накрылся)
Почему накрылся? Распространяешь с прогой Scripting RunTime (~800 кил).
Да дело даже не в этом, хотя WSH — самый простой способ вызывать скрипты из программы. Подробнее здесь: http://www.rsdn.ru/forum/message.asp?mid=39344
char meg_of_ai_code[]="..."; //тут, собственно, программа
CallScript(CComBSTR("VBScript"), meg_of_ai_code);
А еще проще получится, если использовать Script Control, который идет с 6-й студией.
A>Имеется ввиду именно логика а не обработка данных и предопределённое поведение так что SQL подобные языки с конструкциями A>
A>SELECT solution FROM expirience WHERE situation = currentsituation
A>
A>не тянут A>Ответы типа "А не написать ли тебе мужик компилятор/интепретатор такого хорошего языка ка Tufta++" не принимаются !!! A>типа мне лень
А чего же тогда в форуме "Алгоритмы" спрашиваешь? ActiveX, имхо, больше подойдет.
Ну, еще могу посоветовать какой-нить интертрепатор BASIC в исходниках (у меня самого в пыльных архивах штуки 2 валяется).
A>Заранее спасибо
PS: AI, часом, не для игрушки клепаешь?
Здравствуйте retalik, Вы писали:
R>Здравствуйте adontz, Вы писали:
R>Почему накрылся? Распространяешь с прогой Scripting RunTime (~800 кил).
А он freeware ? на сайте Microsoft скачивается ? Если так тогда хоть на Perl-ле пиши
R>http://www.rsdn.ru/forum/message.asp?mid=39344
R>Вот пример, которому и WSH не нужен, достаточно только IE (оригинал привел Игорь Ткачёв, упростил я):
Который IE если не затруднит ? R>Вызывается так: R>
R>char meg_of_ai_code[]="..."; //тут, собственно, программа
R>CallScript(CComBSTR("VBScript"), meg_of_ai_code);
R>
Здесь как я понимаю вместо VBScript можно только JScript/JavaScript ?
Кстати как передать функции на скрипте параметры ? или только в скрипт вшивать ? Но тогда как их оттуда получить ? Должен же скрипт что-то делать !
R>А еще проще получится, если использовать Script Control, который идет с 6-й студией.
Не пользовался (первый раз слышу, может потому что у меня в инсталляции только C++ и InterDev ?) можно по-подробнее...
R>Ну, еще могу посоветовать какой-нить интертрепатор BASIC в исходниках (у меня самого в пыльных архивах штуки 2 валяется).
R>PS: AI, часом, не для игрушки клепаешь?
Ну а как же В цель !
Надо же хоть где-то ум проявить, если не работе то в игре точно!
Здравствуйте adontz, Вы писали:
R>>Почему накрылся? Распространяешь с прогой Scripting RunTime (~800 кил). A>А он freeware ? на сайте Microsoft скачивается ? Если так тогда хоть на Perl-ле пиши
Угу. Но AI на Perl я себе слабо представляю
R>>Вот пример, которому и WSH не нужен, достаточно только IE (оригинал привел Игорь Ткачёв, упростил я): A>Который IE если не затруднит ?
В котором скриптовый движок есть. AFAIR, 3.0 и новее.
R>>Вызывается так: R>>
R>>char meg_of_ai_code[]="..."; //тут, собственно, программа
R>>CallScript(CComBSTR("VBScript"), meg_of_ai_code);
R>>
A>Здесь как я понимаю вместо VBScript можно только JScript/JavaScript ?
Передается ProgId установленного в системе скриптового движка (например, "PerlScript", если он есть).
A>Кстати как передать функции на скрипте параметры ? или только в скрипт вшивать ? Но тогда как их оттуда получить ? Должен же скрипт что-то делать !
Ну, приведенный пример ничего этого не позволит — слишком обрезанная реализация IActiveScriptSite. IT предлагал вариант посильнее, позволяющий передать параметры и получить результат.
А вообще, прелесть в том, что в скриптовый движок можно передавать объекты — любые классы с реализацией IDispatch, и работать с ними из скрипта.
R>>А еще проще получится, если использовать Script Control, который идет с 6-й студией. A>Не пользовался (первый раз слышу, может потому что у меня в инсталляции только C++ и InterDev ?) можно по-подробнее...
Поищи на машине msscript.ocx. Последнюю версию можно опять же скачать с MS for free.
Используется он очень просто, дока к нему есть в MSDN.
Вот, раскопал пример, где я производительность сравнивал с C++ — кодом:
#include <stdio.h>
#include <math.h>
#import"msscript.ocx"using namespace MSScriptControl;
// два куска кода - на C++ и на скрипте
// Выражение должно вычисляться со значением 1void runC()
{
double s=0, sum=0, counter=0;
for(double i=0;i<1;i+=0.000001){
s=sqrt(pow(sin(i),2)+pow(cos(i),2)); //==1
sum+=s; counter++;
}
}
// А это на JScript. sin, cos, pow и sqrt сделаны глобальными (см. ниже)char *statement=
"sum=counter=0;"
"for(i=0;i<1;i+=0.000001){ "
"s=sqrt(pow(sin(i),2)+pow(cos(i),2));"
"sum+=s; counter++;}";
main()
{
CoInitialize(NULL);
long t1=0, t2=0;
try {
IScriptControlPtr pScript;
pScript.CreateInstance("ScriptControl");
pScript->Timeout = -1; //не прерывать выполнение по таймауту
pScript->Language="JScript";
//так можно получить объект из скрипта:
_variant_t Math = pScript->Eval("Math");
//а так - сделать его методы глобальными:
pScript->AddObject("MathMath", LPDISPATCH(Math), VARIANT_TRUE);
long start = GetTickCount();
pScript->ExecuteStatement(statement);
t1 = GetTickCount()-start;
printf("t1=%d ms\n", t1);
start = GetTickCount();
runC();
t2 = GetTickCount()-start;
printf("t2=%d ms\n", t2);
//А правильно ли он считает?
_bstr_t sum = pScript->Eval("sum");
printf("sum=%s\n", (LPCTSTR)sum);
}
catch(_com_error &e)
{
MessageBox(0, e.Description(), "Error", MB_OK|MB_ICONHAND);
}
CoUninitialize();
return 0;
}
У меня код на JScript выполняется 13 секунд (миллион итераций), сишный — .982 секунды.
Разница всего в 13 раз!
R>>PS: AI, часом, не для игрушки клепаешь? A>Ну а как же В цель ! A>Надо же хоть где-то ум проявить, если не работе то в игре точно!
Вот тут мы и перешли от технологий к алгоритмам
Дело в том, что я не придумал, как реализовать многозадачность в скриптах. То есть, каждый объект, управляемый скриптом на AI, должен иметь собственный движок, выполняющийся в собственном потоке. А это жрет ресурсы (правда, не знаю, насколько).
Вот если бы можно было переключение реализовать (без сброса текущего состояния)...
Здравствуйте retalik, Вы писали:
R>Угу. Но AI на Perl я себе слабо представляю :)
Я тоже, это я так, к слову :shuffle:
R>В котором скриптовый движок есть. AFAIR, 3.0 и новее.
Ну это вполне приемлемо, с 98-й виндой 5-й поставляется, а мне 98-я как минимум
A>>Здесь как я понимаю вместо VBScript можно только JScript/JavaScript ? R>Передается ProgId установленного в системе скриптового движка (например, "PerlScript", если он есть).
Ясно, но перл вряд ли будет установлен.... да и "AI на Perl я себе слабо представляю" copyright (c) retalik
A>>Кстати как передать функции на скрипте параметры ? или только в скрипт вшивать ? Но тогда как их оттуда получить ? Должен же скрипт что-то делать ! R>Ну, приведенный пример ничего этого не позволит — слишком обрезанная реализация IActiveScriptSite. IT предлагал вариант посильнее, позволяющий передать параметры и получить результат. R>А вообще, прелесть в том, что в скриптовый движок можно передавать объекты — любые классы с реализацией IDispatch, и работать с ними из скрипта.
Но их для этого надо зарегистрировать или как ?
А, кстати, что если передать параметры в виде констант в самом коде ? Это быстее ? (если в курсе конечно)
R>>>А еще проще получится, если использовать Script Control, который идет с 6-й студией. A>>Не пользовался (первый раз слышу, может потому что у меня в инсталляции только C++ и InterDev ?) можно по-подробнее... R>Поищи на машине msscript.ocx. Последнюю версию можно опять же скачать с MS for free.
Нашёл, даже 3 штуки, правда слава богу одна та же версия 1.0.0.4615
R>Используется он очень просто, дока к нему есть в MSDN.
Буду читать
R>Вот, раскопал пример, где я производительность сравнивал с C++ — кодом:
R>
R>#include <stdio.h>
R>#include <math.h>
R>#import"msscript.ocx"
R>using namespace MSScriptControl;
R>// два куска кода - на C++ и на скрипте
R>// Выражение должно вычисляться со значением 1
R>void runC()
R>{
R> double s=0, sum=0, counter=0;
R> for(double i=0;i<1;i+=0.000001){
R> s=sqrt(pow(sin(i),2)+pow(cos(i),2)); //==1
R> sum+=s; counter++;
R> }
R>}
R>// А это на JScript. sin, cos, pow и sqrt сделаны глобальными (см. ниже)
R>char *statement=
R>"sum=counter=0;"
R>"for(i=0;i<1;i+=0.000001){ "
R>"s=sqrt(pow(sin(i),2)+pow(cos(i),2));"
R>"sum+=s; counter++;}";
R>main()
R>{
R> CoInitialize(NULL);
R> long t1=0, t2=0;
R> try {
R> IScriptControlPtr pScript;
R> pScript.CreateInstance("ScriptControl");
R> pScript->Timeout = -1; //не прерывать выполнение по таймауту
R> pScript->Language="JScript";
R> //так можно получить объект из скрипта:
R> _variant_t Math = pScript->Eval("Math");
R> //а так - сделать его методы глобальными:
R> pScript->AddObject("MathMath", LPDISPATCH(Math), VARIANT_TRUE);
R> long start = GetTickCount();
R> pScript->ExecuteStatement(statement);
R> t1 = GetTickCount()-start;
R> printf("t1=%d ms\n", t1);
R> start = GetTickCount();
R> runC();
R> t2 = GetTickCount()-start;
R> printf("t2=%d ms\n", t2);
R> //А правильно ли он считает?
R> _bstr_t sum = pScript->Eval("sum");
R> printf("sum=%s\n", (LPCTSTR)sum);
R> }
R> catch(_com_error &e)
R> {
R> MessageBox(0, e.Description(), "Error", MB_OK|MB_ICONHAND);
R> }
R> CoUninitialize();
R> return 0;
R>}
R>
Вот за это большое спасибо !!!
R>У меня код на JScript выполняется 13 секунд (миллион итераций), сишный — .982 секунды. R>Разница всего в 13 раз!
Неплохо, интересно от смены языка это сильно изменится.
R>>>PS: AI, часом, не для игрушки клепаешь? :shuffle: A>>Ну а как же :) В цель ! A>>Надо же хоть где-то ум проявить, если не работе то в игре точно! R>Вот тут мы и перешли от технологий к алгоритмам :)
А говорили не в тот форум :)) R>Дело в том, что я не придумал, как реализовать многозадачность в скриптах. То есть, каждый объект, управляемый скриптом на AI, должен иметь собственный движок, выполняющийся в собственном потоке. А это жрет ресурсы (правда, не знаю, насколько). R>Вот если бы можно было переключение реализовать (без сброса текущего состояния)...
Я поставил перед собой более сложную задачу
А именно, я хочу добиться (ну ясно конечно что ничего не выйдет но хочу вот пока) согласованности действий отдельных элементов одной команды. Т.е. чтоб они не на пролом шли а с тактическим расчётом
Для этого и одного потока хватит — генеральского
Только генерал башковитый нужен
А насчёт многозадачности... Ну так ведь и обычная многозадачность ето всего лишь частое переключение между потоками
Так что насоздавай кучу потоков и вызывай в них msscript (прикол если он не поддерживает многозадачность)
А вообще интересно, мне уже и не лень писать компилятор !
Может есть смысл писать код на си в виде одного cpp файла который содержит всего одну функцию с уже заранее предопределёнными параметрами и компилировать её каждый раз в dll, cl.exe+link.exe = 514 101 bytes так что не тяжело ! Да и на понятном языке написано
А есть ли ещё какие ScriptHosts ?
Есть ли такие в которых как в SQL можно создавать уже отпарсеные процедуры с параметрами ?
А вообще большое спасибо !
PS Я вас уже достал наверное, просто всё что я нашёл путного было для VB, а писать на VB 3D весьма странно
Здравствуйте adontz, Вы писали:
A>Ну это вполне приемлемо, с 98-й виндой 5-й поставляется, а мне 98-я как минимум
Я в свое время просто переносил jscript.dll и регистрировал на тех клиентских машинах, на которых не было IE.
R>>А вообще, прелесть в том, что в скриптовый движок можно передавать объекты — любые классы с реализацией IDispatch, и работать с ними из скрипта. A>Но их для этого надо зарегистрировать или как ?
Если под "зарегистрировать" понимается "внести в пространство имен скрипта", то да.
Для этого их достаточно передать скрипту в виде параметров функций или вызвать IActiveScript::AddNamedItem (для Script Control все проще, достаточно вызвать AddObject, как в примере)
A>А, кстати, что если передать параметры в виде констант в самом коде ? Это быстее ? (если в курсе конечно)
Не знаю, но было бы любопытно оценить.
A>А вообще интересно, мне уже и не лень писать компилятор ! A>Может есть смысл писать код на си в виде одного cpp файла который содержит всего одну функцию с уже заранее предопределёнными параметрами и компилировать её каждый раз в dll, cl.exe+link.exe = 514 101 bytes так что не тяжело ! Да и на понятном языке написано
Если не надо динамически создавать/изменять логику AI, я бы вообще не усложнял задачу. Можно обычными COM-модулями обойтись.
А вот если "генерал" будет раздавать "команды" на JScript, это было бы круто A>А есть ли ещё какие ScriptHosts ? A>Есть ли такие в которых как в SQL можно создавать уже отпарсеные процедуры с параметрами ?
Есть, это надо копать интерфейсы IActiveScriptParse.
A>А вообще большое спасибо ! A>PS Я вас уже достал наверное, просто всё что я нашёл путного было для VB, а писать на VB 3D весьма странно
Почему же, на CodeGuru есть статья, где доказывается, что игры только на VB и надо писать
Здравствуйте IT, Вы писали:
R>>Вот пример, которому и WSH не нужен, достаточно только IE (оригинал привел Игорь Ткачёв, упростил я): IT>А называл меня за это извращенцем
Ты меня с кем-то путаешь, я предлагал тебя за это гением назвать
Здравствуйте retalik, Вы писали:
R>>>Вот пример, которому и WSH не нужен, достаточно только IE (оригинал привел Игорь Ткачёв, упростил я): IT>>А называл меня за это извращенцем
R>Ты меня с кем-то путаешь, я предлагал тебя за это гением назвать
Значит в том контексте это звучало одинаково
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте adontz, Вы писали:
A>Есть необходимоть написать искуственный интеллект A>Есть желание написать на C / Pascal / Basic подобном языке программирования, а не мучать матрицы, ссписки и прочую муру A>Есть необходимость использовать этот AI в программе на C++ A>Есть желание не вшивать в программу и не писать dll-ками а использовать какой нибудь скрипт, например те же Java и VB A>Чё делать есть прога должна работать на 98/Me/NT/2K/XP (так что Windows Scripting Host накрылся) A>Имеется ввиду именно логика а не обработка данных и предопределённое поведение так что SQL подобные языки с конструкциями A>
A>SELECT solution FROM expirience WHERE situation = currentsituation
A>
A>не тянут A>Ответы типа "А не написать ли тебе мужик компилятор/интепретатор такого хорошего языка ка Tufta++" не принимаются !!! A>типа мне лень
Позволю себе поехидничать :-)
А почему тут не обсуждается вопрос под Win или Linux лучше писать AI?
А может лучше для этого мышку беспроводную купить? Тоже ведь может помочь...
На мой взгляд, "на чем писать" — это вообще дело десятое и не только в AI.
Здравствуйте adontz, Вы писали:
A>Есть необходимоть написать искуственный интеллект A>Есть желание написать на C / Pascal / Basic подобном языке программирования, а не мучать матрицы, ссписки и прочую муру A>Есть необходимость использовать этот AI в программе на C++ A>Есть желание не вшивать в программу и не писать dll-ками а использовать какой нибудь скрипт, например те же Java и VB A>Чё делать есть прога должна работать на 98/Me/NT/2K/XP (так что Windows Scripting Host накрылся) A>Имеется ввиду именно логика а не обработка данных и предопределённое поведение так что SQL подобные языки с конструкциями A>
A>SELECT solution FROM expirience WHERE situation = currentsituation
A>
A>не тянут A>Ответы типа "А не написать ли тебе мужик компилятор/интепретатор такого хорошего языка ка Tufta++" не принимаются !!! A>типа мне лень
A>Заранее спасибо
Здравствуйте adontz, Вы писали:
A>Есть необходимоть написать искуственный интеллект A>Есть желание написать на C / Pascal / Basic подобном языке программирования, а не мучать матрицы, ссписки и прочую муру A>Есть необходимость использовать этот AI в программе на C++ A>Есть желание не вшивать в программу и не писать dll-ками а использовать какой нибудь скрипт, например те же Java и VB A>Чё делать есть прога должна работать на 98/Me/NT/2K/XP (так что Windows Scripting Host накрылся) A>Имеется ввиду именно логика а не обработка данных и предопределённое поведение так что SQL подобные языки с конструкциями A>
A>SELECT solution FROM expirience WHERE situation = currentsituation
A>
A>не тянут A>Ответы типа "А не написать ли тебе мужик компилятор/интепретатор такого хорошего языка ка Tufta++" не принимаются !!! A>типа мне лень
A>Заранее спасибо
Забей на скрипты, пиши перебором как в шахматах, вот это будет интеллект !
Не знаю. Но по-моему все это есть в MATLAB. Собственный скриптовой язык, MATLAB to C++ compiler. Возможность подсоединять DLL-ки. Обширный математический аппарат. Плюс еще много всяких наворотов. Зачем придумывать что-то свое?