GotAI.NET

Форум: Проблемы искусственного интеллекта

 

Регистрация | Вход

 Все темы | Новая тема Стр.5 (5)<< < Пред.   Поиск:  
 Автор Тема: На: Формализация среды для задачи "Двухуровневое целепологание"
tac
Сообщений: 2601
На: Формализация среды для задачи "Двухуровневое целепологание"
Добавлено: 05 сен 08 21:32
Цитата:
Автор: Алхимик
Как я понимаю, 1,1,0 - это число получаемых ресурсов при эксплуатации территории, т. е. ресурсы неисчерпаемы. А что такое 82 ?


правильно понимаете ...
82 - уникальный код - непринципиально, не обращайте внимания ...
[Ответ][Цитата]
Алхимик
Сообщений: 315
На: Формализация среды для задачи "Двухуровневое целепологание"
Добавлено: 05 сен 08 22:07
Цитата:
Автор: tac



1. Ну почему же нельзя - можно загнать, самые первые эксперименты именно такие и были, и я не так далеко и ушел вперед, хотя ряд идей есть ... Но вся то и проблема, КАКУЮ ИНФОРМАЦИЮ загнать - когда правила не известны, да даже если и известны, как ее привести к виду стимул-реакция, где стимул - это модель наблюдения (25 значений типов территорий и в промежутке еще известно число ресурсов на каждом), а реакция - модель действий (точнее ее оценка числом от 0 до 255)
2. Ну, вообще-то, лучше создавать алгоритм который изменяет базовые данные, а не надеятся что человек их загонит в исчерпывающем виде ... Как написано в посте 2 - отправной точкой (базовыми данными) может служить какой нибудь классический алгоритм принятия решений - например, я выбрал взвешенную оценку альтернатив (см. пост 2)

Я к чему задаю эти вопросы? Если есть система, проявляющая признаки интеллекта, элементами которой являются компьютерная программа и человек, то можно дать 999 шансов из 1000, что причиной интеллекта есть действия человека. Слишком малая вероятность, что оба элемента обладают интеллектом, это требует доказательства. Вот я и хочу выяснить, является ли работа человека в вашей системе чисто механической, производимой по правилам, которую вполне можно заменить работой компьютерной программы. Так что прежде, чем формализовать среду, надо попробовать формализовать учителя. Но пока данных недостаточно. Я подумаю, какие вопросы следует задать. Было бы желательно, чтобы вы на каких нибуть примерах показали работу учителя.
[Ответ][Цитата]
tac
Сообщений: 2601
На: Формализация среды для задачи "Двухуровневое целепологание"
Добавлено: 05 сен 08 22:35
Цитата:
Автор: Алхимик
Я к чему задаю эти вопросы? Если есть система, проявляющая признаки интеллекта, элементами которой являются компьютерная программа и человек, то можно дать 999 шансов из 1000, что причиной интеллекта есть действия человека. Слишком малая вероятность, что оба элемента обладают интеллектом, это требует доказательства. Вот я и хочу выяснить, является ли работа человека в вашей системе чисто механической, производимой по правилам, которую вполне можно заменить работой компьютерной программы. Так что прежде, чем формализовать среду, надо попробовать формализовать учителя. Но пока данных недостаточно. Я подумаю, какие вопросы следует задать. Было бы желательно, чтобы вы на каких нибуть примерах показали работу учителя.


Хорошо не буду вас путать (философию, план исследования, эксперименты изложу потом) ... В самом простом варианте, который мы хотим на данный момент формализовать - учитель однозначно формализуется.

public int GetEstimationForRegion9(sPoint RegionCentrLocation)
{
sInt2Array ResursesCount = new sInt2Array(3 + 1, 9 + 1 + 2);
sPoint tmpLoc = new sPoint();
int Ret;

for (int i = 1; i < 9 + 1; i++)
{
// Сместить координату в одном из 9 направлений по отношению с центра
tmpLoc = RegionCentrLocation;
tmpLoc = pMap.GetCityXY(i, tmpLoc);

GetResursesFromRegion(tmpLoc, i, ResursesCount);
}

Ret = ReScale(ResursesCount, 3, 9);

return Ret;

}

public sInt2Array GetResursesFromRegion(sPoint RegionCentrLocation, int ArrayIndex, sInt2Array ResursesCount)
{
sPoint tmpLoc = new sPoint();
int UsedCount = 0, Ret;

for (int i = 1; i < 9 + 1; i++)
{
// Сместить координату в одном из 9 направлений по отношению с центра
tmpLoc = RegionCentrLocation;
tmpLoc = pMap.GetCityXY(i, tmpLoc);


// Определить не выходит ли координаты за границу карты
Ret = pMap.CheckMapBorder(tmpLoc);
if (Ret == -1) UsedCount++;
else
{
// Определить не занята ли территория
if ((tmpLoc.Z == 0 && pMap.CityInMapZ0[tmpLoc.X].Value[tmpLoc.Y] >= 1) ||
(tmpLoc.Z == 1 && pMap.CityInMapZ1[tmpLoc.X].Value[tmpLoc.Y] >= 1))
{
UsedCount++;
}
else
{
// Если территория не занята, то опредилить количество ресурсов на ней,
// иначе ресурсов на ней нет
int PlaceType = pMap.GetPlaceType(tmpLoc);
int PlaceTypeIndex = -1;
for (int j = 0; j < 15 + 1; j++)
{
if (pMap.oPlaceTypes[j].ID == PlaceType)
{
PlaceTypeIndex = j;
break;
}
}
ResursesCount.Value[1].Value[ArrayIndex] +=
pMap.oPlaceTypes[PlaceTypeIndex].Activities.Value[1];
ResursesCount.Value[2].Value[ArrayIndex] +=
pMap.oPlaceTypes[PlaceTypeIndex].Activities.Value[2];
ResursesCount.Value[3].Value[ArrayIndex] +=
pMap.oPlaceTypes[PlaceTypeIndex].Activities.Value[3];
}
}
}

return ResursesCount;
}

public int ReScale(sInt2Array tResursesCount, int tParameterCount, int tAlternativeCount)
{
int max, min, maxn = 0, minn = 0;

for (int j = 1; j < tParameterCount + 1; j++)
{
// Находим самый большее значение параметра из всех альтернатив
max = 0;
for (int i = 1; i < tAlternativeCount + 1; i++)
{
if (tResursesCount.Value[j].Value[i] > max)
{
max = tResursesCount.Value[j].Value[i];
maxn = i;
}
}
tResursesCount.Value[j].Value[tAlternativeCount + 1] = tResursesCount.Value[j].Value[maxn];

// Находим самый меньшее значение параметра из всех альтернатив
min = 99999;
for (int i = 1; i < tAlternativeCount + 1; i++)
{
if (tResursesCount.Value[j].Value[i] < min)
{
min = tResursesCount.Value[j].Value[i];
minn = i;
}
}
tResursesCount.Value[j].Value[tAlternativeCount + 2] = tResursesCount.Value[j].Value[minn];
}

// Отнимаем самое меньшее значение из всех величин, добавляя 1
// Тем самым выполяется маштабинирование различных параметров
for (int j = 1; j < tParameterCount + 1; j++)
{
for (int i = 1; i < tAlternativeCount + 1; i++)
{
tResursesCount.Value[j].Value[i] -= tResursesCount.Value[j].Value[tAlternativeCount + 2];

tResursesCount.Value[j].Value[i]++;
}
}

double tmp;
double maxmin, maxd;

for (int j = 1; j < tAlternativeCount + 1; j++)
{
tmp = 0;
for (int i = 1; i < tParameterCount + 1; i++)
{
// Разница между самым большим и самым маленьким значением
maxmin = tResursesCount.Value[i].Value[tAlternativeCount + 1] -
tResursesCount.Value[i].Value[tAlternativeCount + 2] + 1;

tmp += tResursesCount.Value[i].Value[j] / maxmin;
}
// Взвешенная оценка по всем параметрам одной альтернативы
Appraisal[j] = tmp / tParameterCount;
}

// Приведение к нужному целочисленному маштабу
for (int i = 1; i < tAlternativeCount + 1; i++)
{
AppraisalI[i] = Convert.ToInt32(Appraisal[i] * 250);
}

// Находим наибольшее значение из всех альернатив
maxd = 0; maxn = 0;
for (int i = 1; i < tAlternativeCount + 1; i++)
{
if (Appraisal[i] > maxd)
{
maxd = Appraisal[i];
maxn = i;
}
}

return maxn;
}
[Ответ][Цитата]
Алхимик
Сообщений: 315
На: Формализация среды для задачи "Двухуровневое целепологание"
Добавлено: 06 сен 08 12:03
Как я понимаю этот кусок выдран из программы, определение некоторых типов и переменных осталось за кадром. Попытаюсь разобраться, но нужно время.
PS. А коментарий "Сместить координату в одном из 9 направлений по отношению с центра"- это забавно.
[Ответ][Цитата]
Алхимик
Сообщений: 315
На: Формализация среды для задачи "Двухуровневое целепологание"
Добавлено: 06 сен 08 14:37
Насколько я понял - это то же самое, что описано в A.II. во втором посте. Агент наблюдает тип местности на видимых клетках, из таблицы соответствия типов и ресурсов берутся нужные данные и считаются 9 оценок (для каждого из возможных ходов). Это вполне можно подсчитать онлайн, и в тоже время я не понимаю, как это считать офлайн, когда неизвестно положение агента. Для случайно выбраных полей? А если поселенец не попадет туда? Насколько я понимаю, оценка однозначно зависит от ресурсов (типов местности). А где же тогда обучение?
[Ответ][Цитата]
Алхимик
Сообщений: 315
На: Формализация среды для задачи "Двухуровневое целепологание"
Добавлено: 06 сен 08 14:52
Цитата:
Автор: tac
new PlaceType( 82, "Степь", 1, 1, 0); // 13.0 %
new PlaceType( 146, "Равнина", 2, 1, 0); // 15.9 %
new PlaceType( 130, "Луг", 2, 0, 0); // 19.9 %
new PlaceType( 97, "Лес", 1, 2, 0); // 4.3 %
new PlaceType( 114, "Пастбище", 1, 3, 0); // 0.7 %
new PlaceType( 210, "Пашня", 3, 1, 0); // 0.7 %
new PlaceType( 109, "Парк", 2, 3, 0); // 0.4 %
new PlaceType( 200, "Озеро", 3, 0, 0); // 0.4 %
new PlaceType( 147, "Река", 2, 1, 1); // 8.7 %
new PlaceType( 65, "Холм", 1, 0, 2); // 6.5 %
new PlaceType( 50, "Поселение", 1, 1, 2); // 2.5 %
new PlaceType( 172, "Порт", 2, 2, 3); // 1.8 %
new PlaceType( 77, "Аэропорт", 1, 0, 3); // 0.7 %
new PlaceType( 72, "Океан", 1, 0, 1); // 19.9 %
new PlaceType( 66, "Тундра", 1, 0, 0); // 4.3 %
new PlaceType( 17, "Горы", 0, 1, 0); // 0.4 %

Если заметите какую нибудь не логичность в соответствии с легендой - прошу укажите ...


Видим, что только в двух случаях("Пашня" и "Озеро") число еды больше двух, т. е. рабочий не только способен прокормить себя (2 ед.), но и создать запас, чтобы город рос, появился новый рабочий. Если на все про все 80 ходов, то сложно ожидать полноценного развития, каких-то сложных стратегий при такой легенде - не до жиру быть бы живу. Что-то я раньше слышал, что оптимальная стратегия искать "океан". Непонятно, зачем его искать, если на нем рабочий сам себя прокормить не в состоянии.
[Ответ][Цитата]
tac
Сообщений: 2601
На: Формализация среды для задачи "Двухуровневое целепологание"
Добавлено: 06 сен 08 19:05
Цитата:
Автор: Алхимик

Насколько я понял - это то же самое, что описано в A.II. во втором посте. Агент наблюдает тип местности на видимых клетках, из таблицы соответствия типов и ресурсов берутся нужные данные и считаются 9 оценок (для каждого из возможных ходов). Это вполне можно подсчитать онлайн, и в тоже время я не понимаю, как это считать офлайн, когда неизвестно положение агента. Для случайно выбраных полей? А если поселенец не попадет туда? Насколько я понимаю, оценка однозначно зависит от ресурсов (типов местности). А где же тогда обучение?


Ну, уже почти во всем разобрались ...
В том, то и дело - если бы было разрешенно онлайн, то обучения и не нужно ... если же офлайн, то учитель например может дать все возможные варианты которые встретятся на карте - это и будет обучение (конечно, точнее предоставление обучающей выборке, но для неготорых алгоритмов (самых простых) на этом все и закончится, в более сложных - агент может составить модель мира на основе этой обучающей выборке, например, при помощи нейронных сетей). Именно предоставление определенного множества пар стимул-реакция я и называю обучением ...
[Ответ][Цитата]
tac
Сообщений: 2601
На: Формализация среды для задачи "Двухуровневое целепологание"
Добавлено: 06 сен 08 19:20
Цитата:
Автор: Алхимик
Видим, что только в двух случаях("Пашня" и "Озеро") число еды больше двух, т. е. рабочий не только способен прокормить себя (2 ед.), но и создать запас, чтобы город рос, появился новый рабочий. Если на все про все 80 ходов, то сложно ожидать полноценного развития, каких-то сложных стратегий при такой легенде - не до жиру быть бы живу. Что-то я раньше слышал, что оптимальная стратегия искать "океан". Непонятно, зачем его искать, если на нем рабочий сам себя прокормить не в состоянии.


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

2. В том вырожленном примере, где нужно было искать океан были друге условия и там писал:
new PlaceType( 82, "Степь", 1, 1, 0);
new PlaceType( 72, "Океан", 1, 0, 2);
и все других территорий нет. Чем особенность этого вырожденного случая - втом, что города никогда не растут - в городе будет всегда только 2 рабочих, один в центре и еще один. А океан нужно искать для того, чтобы получить ресурс деньги, по которому будут оцениваться пригодность агента, в степи как видите деньги не валяются ...
Да, и еще вы не точны, искать нужно было берег океана, т.е. чтобы была возможность построить город, так чтобы можно было обрабатывать степь или океан по желанию.
[Ответ][Цитата]
tac
Сообщений: 2601
На: Формализация среды для задачи "Двухуровневое целепологание"
Добавлено: 06 сен 08 19:27
Цитата:
Автор: Алхимик
PS. А коментарий "Сместить координату в одном из 9 направлений по отношению с центра"- это забавно.


А что вам не нравится - так оно и есть
Агент при этом не смещается, а все расчеты происходят относительно центра, поэтому то и нужно смещать центр расчетов, т.е. координаты ...
[Ответ][Цитата]
IvаnVlаskіn1976
Сообщений: 183
На: Формализация среды для задачи "Двухуровневое целепологание"
Добавлено: 29 янв 23 15:25
Цитата:
Автор: tac



Хорошо не буду вас путать (философию, план исследования, эксперименты изложу потом) ... В самом простом варианте, который мы хотим на данный момент формализовать - учитель однозначно формализуется.

public int GetEstimationForRegion9(sPoint RegionCentrLocation)
{
sInt2Array ResursesCount = new sInt2Array(3 + 1, 9 + 1 + 2);
sPoint tmpLoc = new sPoint();
int Ret;

for (int i = 1; i < 9 + 1; i++)
{
// Сместить координату в одном из 9 направлений по отношению с центра
tmpLoc = RegionCentrLocation;
tmpLoc = pMap.GetCityXY(i, tmpLoc);

GetResursesFromRegion(tmpLoc, i, ResursesCount);
}

Ret = ReScale(ResursesCount, 3, 9);

return Ret;

}

public sInt2Array GetResursesFromRegion(sPoint RegionCentrLocation, int ArrayIndex, sInt2Array ResursesCount)
{
sPoint tmpLoc = new sPoint();
int UsedCount = 0, Ret;

for (int i = 1; i < 9 + 1; i++)
{
// Сместить координату в одном из 9 направлений по отношению с центра
tmpLoc = RegionCentrLocation;
tmpLoc = pMap.GetCityXY(i, tmpLoc);


// Определить не выходит ли координаты за границу карты
Ret = pMap.CheckMapBorder(tmpLoc);
if (Ret == -1) UsedCount++;
else
{
// Определить не занята ли территория
if ((tmpLoc.Z == 0 && pMap.CityInMapZ0[tmpLoc.X].Value[tmpLoc.Y] >= 1) ||
(tmpLoc.Z == 1 && pMap.CityInMapZ1[tmpLoc.X].Value[tmpLoc.Y] >= 1))
{
UsedCount++;
}
else
{
// Если территория не занята, то опредилить количество ресурсов на ней,
// иначе ресурсов на ней нет
int PlaceType = pMap.GetPlaceType(tmpLoc);
int PlaceTypeIndex = -1;
for (int j = 0; j < 15 + 1; j++)
{
if (pMap.oPlaceTypes[j].ID == PlaceType)
{
PlaceTypeIndex = j;
break;
}
}
ResursesCount.Value[1].Value[ArrayIndex] +=
pMap.oPlaceTypes[PlaceTypeIndex].Activities.Value[1];
ResursesCount.Value[2].Value[ArrayIndex] +=
pMap.oPlaceTypes[PlaceTypeIndex].Activities.Value[2];
ResursesCount.Value[3].Value[ArrayIndex] +=
pMap.oPlaceTypes[PlaceTypeIndex].Activities.Value[3];
}
}
}

return ResursesCount;
}

public int ReScale(sInt2Array tResursesCount, int tParameterCount, int tAlternativeCount)
{
int max, min, maxn = 0, minn = 0;

for (int j = 1; j < tParameterCount + 1; j++)
{
// Находим самый большее значение параметра из всех альтернатив
max = 0;
for (int i = 1; i < tAlternativeCount + 1; i++)
{
if (tResursesCount.Value[j].Value[i] > max)
{
max = tResursesCount.Value[j].Value[i];
maxn = i;
}
}
tResursesCount.Value[j].Value[tAlternativeCount + 1] = tResursesCount.Value[j].Value[maxn];

// Находим самый меньшее значение параметра из всех альтернатив
min = 99999;
for (int i = 1; i < tAlternativeCount + 1; i++)
{
if (tResursesCount.Value[j].Value[i] < min)
{
min = tResursesCount.Value[j].Value[i];
minn = i;
}
}
tResursesCount.Value[j].Value[tAlternativeCount + 2] = tResursesCount.Value[j].Value[minn];
}

// Отнимаем самое меньшее значение из всех величин, добавляя 1
// Тем самым выполяется маштабинирование различных параметров
for (int j = 1; j < tParameterCount + 1; j++)
{
for (int i = 1; i < tAlternativeCount + 1; i++)
{
tResursesCount.Value[j].Value[i] -= tResursesCount.Value[j].Value[tAlternativeCount + 2];

tResursesCount.Value[j].Value[i]++;
}
}

double tmp;
double maxmin, maxd;

for (int j = 1; j < tAlternativeCount + 1; j++)
{
tmp = 0;
for (int i = 1; i < tParameterCount + 1; i++)
{
// Разница между самым большим и самым маленьким значением
maxmin = tResursesCount.Value[i].Value[tAlternativeCount + 1] -
tResursesCount.Value[i].Value[tAlternativeCount + 2] + 1;

tmp += tResursesCount.Value[i].Value[j] / maxmin;
}
// Взвешенная оценка по всем параметрам одной альтернативы
Appraisal[j] = tmp / tParameterCount;
}

// Приведение к нужному целочисленному маштабу
for (int i = 1; i < tAlternativeCount + 1; i++)
{
AppraisalI[i] = Convert.ToInt32(Appraisal[i] * 250);
}

// Находим наибольшее значение из всех альернатив
maxd = 0; maxn = 0;
for (int i = 1; i < tAlternativeCount + 1; i++)
{
if (Appraisal[i] > maxd)
{
maxd = Appraisal[i];
maxn = i;
}
}

return maxn;
}
[as0001] { [ao0002] {otv(fv5,fsy,foy,ftNpn,fk1,wn,un)"купил"} [ao0003] {ots(fpi,fk1)"купец"[ah0004]{oth(fvh,fk1)"щедрость} } [ao0005] { otos(fpr,fk1)"кольцо"} [ao0006] {otn(fn=1234,fk1)"бродяга"} [ao0007] {otn(fn=1235,fk1)"монета" } [ao0008] {otn(fn=1236,fk1)"ярморка" } }
as - адрес системы
ao - адрес объекта
ah - адрес характеристики
ap - адрес родительской системы
ag - адрес предочной системы

o - object объект

t - type тип объекта

v - verb глагол
s - subject субъект
os - object субъектый объект
o1
o2
o3
o4
o5
o6
o7
o8
h - прилагательное
n - наречие

f - формат

fv - формат валентности
fv0 - глагол с пустой валентностью
fv1 - глагол с 1 валентностью
fv2 - глагол с 2 валентностью
fv3 - глагол с 3 валентностью
fv4 - глагол с 4 валентностью
fv5 - глагол с 5 валентностью
fv6 - глагол с 6 валентностью
fv7 - глагол с 7 валентностью
fvN - глагол с неопределенной валентностью

fs
fsy - глагол с субъектом
fsn - глагол без субъекта

fo
foy - глагол с субъектным_объектом
fon - глагол без субъектного_объекта

ft - формат времени
ftN - неопределенное время
ftNpn - неопределенное время прошедшего или настоящего времени
ftNnf - неопределенное время настоящего или будущего времени
ftp1 -прошедшее время единственного раза
ftpt - прошедшее время продолжительного раза
ftpr - прошедшее время отрезочного раза
ftpN - прошедшее время с неопределенным разом
ftn1 - настоящее время единственного раза
ftnt - настоящее время продолжительного раза
ftnr - настоящее время отрезочного раза
ftnN - настоящее время с неопределенным разом
ftf1 - будущее время единственного раза
ftft - будущее время продолжительного раза
ftfr - будущее время отрезочного раза
ftfN - будущее время с неопределенным разом

fk - формат количества
fkN - неопределенное количество
fk1 - единственным количество
fkK - множественное количество
fkS - одноразовое количество
fkD - дублирующее количество

fg - формат пола(гендерности)
fgN - неопределенный пол
fgNm - неопределенный пол в мужской форме
fgNw - неопределенный пол в женской форме
fgNo - неопределенный пол в средней форме
fgm - мужской пол
fgw - женский пол
fgo - средний пол

wn - вакансии нет
wys - вакансия субъекта
wyo - вакансия субъекного_объекта
wy1 - вакансия 1 объекта(возможно субъекта)
wy2 - вакансия 2 объекта(возможно субъекного_объекта)
wy3 - вакансия 3 объекта
wy4 - вакансия 4 объекта
wy5 - вакансия 5 объекта
wy6 - вакансия 6 объекта
wy7 - вакансия 7 объекта

un - уточнения нет
uys - уточнение субъекта
uyo - уточнение субъекного_объекта
uy1 - уточнение 1 объекта(возможно субъекта)
uy2 - уточнение 2 объекта(возможно субъекного_объекта)
uy3 - уточнение 3 объекта
uy4 - уточнение 4 объекта
uy5 - уточнение 5 объекта
uy6 - уточнение 6 объекта
uy7 - уточнение 7 объекта

fp - формат падежности
fpi - именительный падеж
fpr - родительный падеж
fpd - дательный падеж
fpw - винительный падеж
fpt - творительный падеж
fpp - предложный падеж

fv - формат вида прилагательного
fvv - формат вида глагол
fvo - формат вида объект
fvh - формат вида характеристика
[Ответ][Цитата]
 Стр.5 (5)1  2  3  4  [5]<< < Пред.