昆明理工大学人工智能第二次实验报告
- 格式:doc
- 大小:103.00 KB
- 文档页数:10
理工大学信息工程与自动化学院学生实验报告
( 2013 — 2014 学年第 1 学期)
课程名称:人工智能开课实验室:信自楼445 2013 年12月 20日
一、上机目的及容
1.上机容
用确定性推理算法求解教材65-66页介绍的八数码难题。
2.上机目的
(1)复习程序设计和数据结构课程的相关知识,实现课程间的平滑过渡;
(2)掌握并实现在小规模状态空间中进行图搜索的方法;
(3)理解并掌握图搜索的技术要点。
二、实验原理及基本技术路线图(方框原理图或程序流程图)
(1)设计并实现程序,求解出正确的解答路径;
(2)对所设计的算法采用大O符号进行时间复杂性和空间复杂性分析;
(3)对一般图搜索的技术要点和技术难点进行评述性分析。
三、所用仪器、材料(设备名称、型号、规格等或使用软件)
1台PC及VISUAL C++6.0软件
四、实验方法、步骤(或:程序代码或操作过程)
建立工程后建立5个source Files文件分别为
1.AttributeValue.cpp
#include "AttributeValue.h"
#include "base.h"
AttributeValue::AttributeValue(std::string const& instring) : m_value(instring)
{
}
bool AttributeValue::GetType()
{
if (m_value == "P")
{
return true;
}
else if (m_value == "N")
{
return false;
}
else
{
throw DataErrException();
}
}
2.basefun.cpp
#include
float log2 (float x)
{
return 1.0 / log10(2) * log10(x);
}
float calEntropy(float prob)
{
float sum=0;
if (prob == 0 || prob == 1)
{
return 0;
}
sum -= prob * log2(prob);
sum -= (1 - prob) * log2 ( 1 - prob );
return sum;
3.DataPoint.cpp
#include
#include "DataPoint.h"
DataPoint::DataPoint(std::vector
{
for (int i=0; i { m_attributes.push_back( attributes[i] ); } } void DataPoint::display() { for (int i=0; i { std::cout << "\t" << m_attributes[i].getValue(); } if (true == m_type) { std::cout << "\tP"; } else { std::cout << "\tN"; } std::cout << std::endl; } 4.DataSet.cpp 5.main.cpp #include #include #include #include #include #include #include "AttributeValue.h" #include "DataPoint.h" #include "DataSet.h" DataPoint processLine(std::string const& sLine) { std::istringstream isLine(sLine, std::istringstream::in); std::vector // TODO: need to handle beginning and ending empty spaces. while( isLine.good() ) { std::string rawfield; isLine >> rawfield; attributes.push_back( AttributeValue( rawfield ) ); } AttributeValue v = attributes.back(); attributes.pop_back(); bool type = v.GetType(); return DataPoint(attributes, type); } void main() { std::ifstream ifs("in.txt", std::ifstream::in); DataSet initDataset; while( ifs.good() ) { // TODO: need to handle empty lines. std::string sLine; std::getline(ifs, sLine); initDataset.addDataPoint( processLine(sLine) ); } std::list std::vector processQ.push_back(initDataset); while ( processQ.size() > 0 ) { std::vector