View unanswered posts | View active topics It is currently Thu Oct 30, 2014 1:49 pm






Reply to topic  [ 2 posts ] 
How to covert in robotC platform this code! 
Author Message
Rookie

Joined: Mon Dec 12, 2011 2:10 am
Posts: 10
Post How to covert in robotC platform this code!
Code:
#include <iostream>
#include <fstream>
#include <math.h>
#include <stdio.h>
#include <conio.h>
#define  NATTRS 5 //number of attributes
#define  MAXSZ  1700 //max size of training set
#define  MAXVALUE  10000.0 //the biggest attribute's value is below 10000(int)
#define  K  5

using namespace std;
struct vector {
    double attributes[NATTRS];
    double classlabel;
};
struct item {
    double distance;
    double classlabel;
};
struct vector trSet[MAXSZ];//global variable,the training set
struct item knn[K];//global variable,the k-neareast-neighbour set
int curTSize = 0; //current size of the training set
int AddtoTSet(struct vector v)
{
    if(curTSize>=MAXSZ) {
        cout<<endl<<"The training set has "<<MAXSZ<<" examples!"<<endl<<endl;
        return 0;
    }
    trSet[curTSize] = v;
    curTSize++;
    return 1;
}
double Distance(struct vector v1,struct vector v2)
{
    double d = 0.0;
    double tem = 0.0;
    for(int i = 0;i < NATTRS;i++)
        tem += (v1.attributes[i]-v2.attributes[i])*(v1.attributes[i]-v2.attributes[i]);
    d = sqrt(tem);
    return d;
}
int max(struct item knn[]) //return the no. of the item which has biggest distance(
                           //should be replaced)
{
    int maxNo = 0;
    if(K > 1)
    for(int i = 1;i < K;i++)
        if(knn[i].distance>knn[maxNo].distance)
            maxNo = i;
    return maxNo;
}

double Classify(struct vector v)//decide which class label will be assigned to
                             //a given input vetor with the knn method
{
    double dd = 0;
    int maxn = 0;
    int freq[K];
    double mfreqC = 0;//the class label appears most frequently
    int i;
    for(i = 0;i < K;i++)
        knn[i].distance = MAXVALUE;
    for(i = 0;i < curTSize;i++)
    {
        dd = Distance(trSet[i],v);
        maxn = max(knn);//for every new state of the training set should update maxn
            if(dd < knn[maxn].distance) {
                knn[maxn].distance = dd;
                knn[maxn].classlabel = trSet[i].classlabel;
            }
    }
    for(i = 0;i < K;i++)//freq[i] represents knn[i].classlabel appears how many times
        freq[i] = 1;
    for(i = 0;i < K;i++)
        for(int j = 0;j < K;j++)
            if((i!=j)&&(knn[i].classlabel == knn[j].classlabel))
                freq[i]+=1;
    int mfreq = 1;
    mfreqC = knn[0].classlabel;
    for(i = 0;i < K;i++)
        if(freq[i] > mfreq)  {
            mfreq = freq[i];//mfreq represents the most frepuences
            mfreqC = knn[i].classlabel; //mfreqNo is the item no. with the most frequent
                                         //classlabel
        }
    return mfreqC;
}
void main()
{

    double classlabel;
    double c;
    double n;
    struct vector trExmp;
    int i;
    ifstream filein("d:\\1.txt");
    if(filein.fail()){cout<<"Can't open data.txt"<<endl; return;}
    while(!filein.eof()) {
        filein>>c;
        trExmp.classlabel = c;
        cout<<trExmp.classlabel<<" ";

        for(int i = 0;i < NATTRS;i++) {
        filein>>n;
        trExmp.attributes[i] = n;
        cout<<trExmp.attributes[i]<<" ";
        }

        cout<<endl;
     if(!AddtoTSet(trExmp))
        break;
    }

    filein.close();

    struct vector testv={{142,188,11,1159,0.5513196},17};
    classlabel = Classify(testv);
    cout<<"The classlable of the testv is:    ";
    cout<<classlabel<<endl;
    for(i = 0;i < K;i++)
        cout<<knn[i].distance<<"\t"<<knn[i].classlabel<<endl;
    //cout<<max(knn);
}


Sat Feb 25, 2012 8:09 am
Profile
Moderator
Moderator
User avatar

Joined: Wed Mar 05, 2008 8:14 am
Posts: 3227
Location: Rotterdam, The Netherlands
Post Re: How to covert in robotC platform this code!
What does the code do? Why do you need it? How to convert it to ROBOTC? Line by line, I would suspect!

- Xander

_________________
| Professional Conduit of Reasonableness
| (Title bestowed upon on the 8th day of November, 2013)
| My Blog: I'd Rather Be Building Robots
| ROBOTC 3rd Party Driver Suite: [Project Page]


Sat Feb 25, 2012 5:00 pm
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 2 posts ] 

Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  



Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.