Эвристическое программирование [heuristic programming] - вид программирования, основанный на методах моделирования мыслительной деятельности человека и используемый для решения проблем, не имеющих строгого формализованного алгоритма решения, либо в условиях неполного задания исходных данных.
Слово эвристика происходит от греческого heuresko — открытие, открываю. Наука эвристика изучает творческую деятельность наука.
В отличие от моделирования на уровне нейронных сетей, эвристическое программирование исследует другой уровень организации поведения, называемый операционным. На этом уровне поведение рассматривается как последовательность мыслительных, может быть не всегда осознаваемых человеком операций, дополнение которых приводит к успешному решению той или иной задачи.
Обычная процедура построения моделей методом эвристического программирования строится следующим образом. Испытуемым предлагается решать некоторую задачу, сопровождая свои размышления устными комментариями хода своих рассуждений. Все высказывания испытуемых протоколируются. Затем протоколы подвергают анализу с целью выявления хода решения, характера применяемых операций, догадок, приемов и т. п. Полученный в ходе анализа материал используется при составлении компьютерной программы — модели данного вида поведения. Таким образом, программа является моделью не испытуемого, а протокола. Такая модель должна выполнять то, что делает испытуемый, и так, как этo делает он.
Развитие эвристического программирования связано с построением разнообразных моделей, таких, как модели поведения при выборе, при определении стратегии размещения ценных бумаг и др. Однако наибольшие успехи теоретического и прикладного характера достигнуты при создании систем искусственного интеллекта, называемых решателями задач.
Разработка программ — решателей задач преследует две основные цели: во-первых, являясь моделью поведения человека в определенных условиях, решатель обладает некоторой объяснительной силой и может быть использован для предсказания действий человека в ходе решения; во-вторых, решатель может быть использован как составная часть в системах автоматизации управления сложными объектами, в частности — роботами.