[GRASS-SVN] r54124 - grass-addons/grass6/raster/mcda/r.roughset
svn_grass at osgeo.org
svn_grass at osgeo.org
Sat Dec 1 09:11:28 PST 2012
Author: gianluca
Date: 2012-12-01 09:11:28 -0800 (Sat, 01 Dec 2012)
New Revision: 54124
Removed:
grass-addons/grass6/raster/mcda/r.roughset/Makefile
grass-addons/grass6/raster/mcda/r.roughset/description.html
grass-addons/grass6/raster/mcda/r.roughset/localproto.h
grass-addons/grass6/raster/mcda/r.roughset/main.c
grass-addons/grass6/raster/mcda/r.roughset/raccess.c
grass-addons/grass6/raster/mcda/r.roughset/raccess.h
grass-addons/grass6/raster/mcda/r.roughset/rbasic.c
grass-addons/grass6/raster/mcda/r.roughset/rbasic.h
grass-addons/grass6/raster/mcda/r.roughset/rclass.c
grass-addons/grass6/raster/mcda/r.roughset/rclass.h
grass-addons/grass6/raster/mcda/r.roughset/rcore.c
grass-addons/grass6/raster/mcda/r.roughset/rcore.h
grass-addons/grass6/raster/mcda/r.roughset/reduct1.c
grass-addons/grass6/raster/mcda/r.roughset/reduct1.h
grass-addons/grass6/raster/mcda/r.roughset/reduct2.c
grass-addons/grass6/raster/mcda/r.roughset/reduct2.h
grass-addons/grass6/raster/mcda/r.roughset/rerror.h
grass-addons/grass6/raster/mcda/r.roughset/rough.h
grass-addons/grass6/raster/mcda/r.roughset/rset.c
grass-addons/grass6/raster/mcda/r.roughset/rset.h
grass-addons/grass6/raster/mcda/r.roughset/rsystem.c
grass-addons/grass6/raster/mcda/r.roughset/rsystem.h
grass-addons/grass6/raster/mcda/r.roughset/rule1.c
grass-addons/grass6/raster/mcda/r.roughset/rule1.h
grass-addons/grass6/raster/mcda/r.roughset/rule2.c
grass-addons/grass6/raster/mcda/r.roughset/rule2.h
grass-addons/grass6/raster/mcda/r.roughset/rules_extr.c
Log:
Deleted: grass-addons/grass6/raster/mcda/r.roughset/Makefile
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/Makefile 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/Makefile 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,10 +0,0 @@
-MODULE_TOPDIR = ../../..
-
-PGM = r.roughset
-
-LIBES= $(GISLIB) $(GMATHLIB)
-DEPENDENCIES = $(GISDEP)
-
-include $(MODULE_TOPDIR)/include/Make/Module.make
-
-default: cmd
Deleted: grass-addons/grass6/raster/mcda/r.roughset/description.html
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/description.html 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/description.html 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,68 +0,0 @@
-<h2>DESCRIPTION</h2>
-
-<em>r.roughset</em> is the implementation of the rough set theory [1,2] in GRASS GIS environment. It requires the following input:
-<br>1. the geographical attributes constituting the information system for the rough set analysis; they have to describe environmental, economic or social issues(<b>attributes</b>=<em>string[,string,...]</em>);<br> 2.the theme in which areas with the issues to be studied are identified (<b>decision</b>=<em>string</em>).
-
-<p>An information system is generated and the functions of version 2 of rough set library (RSL, ver. 2.0) [3] are applied, following one of the decision strategies available with the option<b>strgy</b>=<em>string.</em></P>
-<p><em>The choice of the classification strategy, </em><em><b>clssfy</b></em><em>=string
-</em><em> is necessary to generate a map based on the attributes and the decision rules. Three options are available:</em><em><I>Classify1,Classify2,Classify3</I></em><em> </em><em>each of them is referred to a different algorithm. [3]. </em><br><br>It is possible to get three different output files; two of them are text files, the third is a raster file: </P>
-<p>a. <I>text file</I> structured following the standard of the rough set library, having the name registered in the <b>outTXT</b><I><SPAN STYLE="font-weight: normal">=string</I> without any additional extension. The file can be used as well with RSL implementation out of GIS environment.</P>
-<p><I>NAME: name of the information system </I></P>
-<p><I>ATTRIBUTES: 4 (number of attributes) </I></P>
-<p><I>OBJECTS: 8 (number of objects)</I></P>
-<p><I>0 0 0 0 </I>
-</P>
-<p><I>1 0 1 1</I></P>
-<p><I>1 1 0 0 </I>
-</P>
-<p><I>0 2 0 1 </I>
-</P>
-<p><I>1 2 0 1 </I>
-</P>
-<p><I>1 0 0 0 </I>
-</P>
-<p><I>1 2 0 1 </I>
-</P>
-<p><I>0 0 1 1 </I>
-</P>
-
-<p>The number of attributes is the number of raster given as input at <b>attributes</b>=<em>string[,string,...]
-</em><em> plus the decision raster </em><em>(</em><em><b>decision</b></em><em>=string) </em><em>located in the last column of the information system, by default. </em></P>
-<p>b. <I>text file</I>, having the name defined in <b>outTXT</b><I><SPAN STYLE="font-weight: normal">=string</I>
-and the .<I>out</I>, extension. It contains the decision rules extracted from the geographic information system; decision rules are expressed as:
- <I>if ... then </I> and they are easy to read and to be interpreted by the user; <br>c. <I>raster, </I>having the name defined in the field <b>outMAP</b><I>=string,
-</I> resulting from the application of the decision rules generated by the geographic information system following one of the classification strategies in <em><b>clssfy</b></em><em>=string.
-</em><em> Rules to apply can derive from an information system generated from the data entered in </em><em><b>attributes</b></em><em>=</em><em>string
-</em><em>and</em><em>
-</em><em><b>decision</b></em><em>=string
-</em><em>or from a text file generated from a previous processing stage. In this case the file structure must be as the one reported in box 1. </em></P>
-
-
-<h2>NOTES</h2>
-<p>The module can process CELL raster, and calculations can be made only with integer (int) variables. This is a constraint imposed by the rough set library. The decision rules, therefore, provide only integer information. </P>
-
-
-<h2>REFERENCE</h2>
-<ol>
- <li><p>Pawlak Z. Rough Sets, International Journal of
- Information and Computer Science Vol. 11, No. 5, 1982, pp.
- 344-356.</P>
- <li><p>Pawlak Z. Rough Sets, Theoretical Aspects of
- Reasoning about Data, Kluwer Academic Publishers, 1991.</P>
- <li><p>Gawrys M., Sienkiewicz J. Rough Set
- Library - User's manual (ver. 2.0), September 1993</P>
- <li><p><a href="http://en.wikipedia.org/wiki/Rough_set">http://en.wikipedia.org/wiki/Rough_set</a>
- - “rough set”</P>
- <p>
- </P>
-</ol>
-
-<h2>SEE ALSO</h2>
-<p><em>r.mcda.fuzzy, r.mcda.electre, r.mcda.regime</em></P>
-
-<h2>AUTHORS</h2>
-Antonio Boggia - Gianluca Massei<br>
-Department of Economics and Appraisal - University of Perugia - Italy
-
-<p>
-<i>Last changed: $Date$</i>
Deleted: grass-addons/grass6/raster/mcda/r.roughset/localproto.h
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/localproto.h 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/localproto.h 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,15 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stddef.h>
-#include <time.h>
-#include <grass/gis.h>
-#include <grass/glocale.h>
-
-
-struct input
-{
- char *name, *mapset;
- int fd;
- CELL *buf;
-};
Deleted: grass-addons/grass6/raster/mcda/r.roughset/main.c
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/main.c 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/main.c 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,276 +0,0 @@
-
-/****************************************************************************
- *
- * MODULE: r.roughset
- * AUTHOR(S): GRASS module authors ad Rough Set Library (RSL) maintain:
- * G.Massei (g_massa at libero.it)-A.Boggia (boggia at unipg.it)
- * Rough Set Library (RSL) ver. 2 original develop:
- * M.Gawrys - J.Sienkiewicz
- *
- * PURPOSE: Geographics rough set analisys and knowledge discovery
- *
- * COPYRIGHT: (C) A.Boggia - G.Massei (2008)
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************/
-
-#include "localproto.h"
-
-
-int main(int argc, char *argv[])
-{
- struct Cell_head cellhd; /* it stores region information, and header of rasters */
- char *mapset; /* mapset name */
- int i, j; /* index and files number */
- int row, col, nrows, ncols;
- int nattributes; /*attributes numer */
- int strgy, cls; /* strategy rules extraction and classifiy index */
-
- char *result; /* output raster name */
- int *classify_vect; /* matrix for classified value storage */
- int outfd; /* output file descriptor */
- unsigned char *outrast; /* output buffer */
-
- RASTER_MAP_TYPE data_type; /* type of the map (CELL/DCELL/...) */
-
- /*int value, decvalue; *//*single attribute and decision value */
-
- struct input *attributes;
- struct History history; /* holds meta-data (title, comments,..) */
-
- struct GModule *module; /* GRASS module for parsing arguments */
-
- struct Option *attr_map, *dec_map, *dec_txt, *genrules, *clssfy, *output_txt, *output_map; /* options */
-
- /*struct Flag *flagQuiet flags */
-
- /* initialize GIS environment */
- G_gisinit(argv[0]); /* reads grass env, stores program name to G_program_name() */
-
- /* initialize module */
- module = G_define_module();
- module->keywords = _("raster,geographics knowledge discovery");
- module->description = _("Rough set based geographics knowledge ");
-
-
- /* Define the different options as defined in gis.h */
- attr_map = G_define_option(); /* Allocates memory for the Option structure and returns a pointer to this memory */
- attr_map->key = "attributes";
- attr_map->type = TYPE_STRING;
- attr_map->required = YES;
- attr_map->multiple = YES;
- attr_map->gisprompt = "old,cell,raster";
- attr_map->description =
- _("Input geographics ATTRIBUTES in information system");
-
- dec_map = G_define_option();
- dec_map->key = "decision";
- dec_map->type = TYPE_STRING;
- dec_map->required = NO;
- dec_map->gisprompt = "old,cell,raster";
- dec_map->description =
- _("Input geographics DECISION in information system");
-
- genrules = G_define_option();
- genrules->key = "strgy";
- genrules->type = TYPE_STRING;
- genrules->required = YES;
- genrules->options = "Very fast,Fast,Medium,Best,All,Low,Upp,Normal";
- genrules->answer = "Very fast";
- genrules->description = _("Strategies for generating rules");
-
- dec_txt = G_define_option();
- dec_txt->key = "sample";
- dec_txt->type = TYPE_STRING;
- dec_txt->required = NO;
- dec_txt->gisprompt = "old_file,file,input";
- dec_txt->description =
- _("Input text file with data and decision sample");
-
- clssfy = G_define_option();
- clssfy->key = "clssfy";
- clssfy->type = TYPE_STRING;
- clssfy->required = YES;
- clssfy->options = "Classify1,Classify2,Classify3";
- clssfy->answer = "Classify1";
- clssfy->description =
- _("Strategies for classified map (conflict resolution)");
-
- output_txt = G_define_option();
- output_txt->key = "outTXT";
- output_txt->type = TYPE_STRING;
- output_txt->required = YES;
- // output_txt->gisprompt = "new_file,file,output";
- output_txt->answer = "InfoSys";
- output_txt->description = _("Output information system file");
-
- output_map = G_define_option();
- output_map->key = "outMAP";
- output_map->type = TYPE_STRING;
- output_map->required = YES;
- output_map->answer = "classify";
- output_map->description = _("Output classified map");
-
-
- /* options and flags parser */
- if (G_parser(argc, argv))
- exit(EXIT_FAILURE);
-
- /* Either decision map or sample file are necesary */
- if (dec_map->answer == NULL && dec_txt->answer == NULL)
- G_fatal_error(_("Either decision map or sample file are necessary!"));
-
- /***********************************************************************/
-
- /********Prepare and controlling Information System files **************/
-
- /***********************************************************************/
-
- /* number of file (=attributes) */
- nattributes = 0;
- while (attr_map->answers[nattributes] != NULL)
- {
- nattributes++;
- }
-
- /* store output classified MAP name in variable */
- result = output_map->answer;
-
- /*Convert strategy rules extraction answer in index. strcmp return 0 if answer is the passed string */
- if (strcmp(genrules->answer, "Very fast") == 0)
- strgy = 0;
- else if (strcmp(genrules->answer, "Fast") == 0)
- strgy = 1;
- else if (strcmp(genrules->answer, "Medium") == 0)
- strgy = 2;
- else if (strcmp(genrules->answer, "Best") == 0)
- strgy = 3;
- else if (strcmp(genrules->answer, "All") == 0)
- strgy = 4;
- else if (strcmp(genrules->answer, "Low") == 0)
- strgy = 5;
- else if (strcmp(genrules->answer, "Upp") == 0)
- strgy = 6;
- else
- strgy = 7;
-
- /*Convert strategy map lassify answer in index. strcmp return 0 if answer is the passed string */
-
- if (strcmp(clssfy->answer, "Classify1") == 0)
- cls = 0;
- else if (strcmp(clssfy->answer, "Classify2") == 0)
- cls = 1;
- else if (strcmp(clssfy->answer, "Classify3") == 0)
- cls = 2;
- else
- cls = 0;
-
-
- /* process the input maps: */
- /* ATTRIBUTES grid */
- attributes = G_malloc((nattributes + 1) * sizeof(struct input)); /*attributes is input struct defined in localproto.h */
-
- for (i = 0; i < nattributes; i++)
- {
- struct input *p = &attributes[i];
-
- p->name = attr_map->answers[i];
- p->mapset = G_find_cell(p->name, ""); /* G_find_cell: Looks for the raster map "name" in the database. */
-
- p->fd = G_open_cell_old(p->name, p->mapset);
-
- if (!p->mapset)
- G_fatal_error(_("Raster file <%s> not found"), p->name);
-
- if (p->fd < 0)
- G_fatal_error(_("Unable to open input map <%s> in mapset <%s>"),
- p->name, p->mapset);
-
- if (CELL_TYPE != G_raster_map_type(p->name, p->mapset))
- G_fatal_error(_("Input map <%s> in mapset <%s> isn't CELL type"),
- p->name, p->mapset);
-
- p->buf = G_allocate_c_raster_buf(); /* Allocate an array of CELL based on the number of columns in the current region. Return DCELL * */
-
- }
-
-
- /* define the inputmap DECISION type (CELL) */
- data_type = CELL_TYPE; //
- /* Allocate output buffer, use input map data_type */
- nrows = G_window_rows();
- ncols = G_window_cols();
- outrast = G_allocate_raster_buf(data_type);
-
-
- /* DECISION grid (at last column in Information System matrix) */
- if (dec_map->answer != NULL)
- {
- struct input *p = &attributes[nattributes];
-
- p->name = dec_map->answer;
- p->mapset = G_find_cell(p->name, ""); /* G_find_cell: Looks for the raster map "name" in the database. */
- if (!p->mapset)
- G_fatal_error(_("Raster file <%s> not found"), p->name);
- p->fd = G_open_cell_old(p->name, p->mapset); /*opens the raster file name in mapset for reading. A nonnegative file descriptor is returned if the open is successful. */
- if (p->fd < 0)
- G_fatal_error(_("Unable to open input map <%s> in mapset <%s>"),
- p->name, p->mapset);
- p->buf = G_allocate_raster_buf(data_type); /* Allocate an array of DCELL based on the number of columns in the current region.
- Return DCELL * */
- rough_set_library_out(nrows, ncols, nattributes, attributes, output_txt->answer); /*build RSL standard file */
- }
-
-
- classify_vect = G_malloc(sizeof(int) * (nrows * ncols)); /* memory allocation */
-
- rough_analysis(nrows, ncols, output_txt->answer, classify_vect, attributes, dec_txt->answer, strgy, cls); /* extract rules from RSL and generate classified vector */
-
- /* controlling, if we can write the raster */
- if ((outfd = G_open_raster_new(result, CELL_TYPE)) < 0)
- G_fatal_error(_("Unable to create raster map <%s>"), result);
-
- /* generate classified map */
- G_message("Building calssified map...");
- j = 0; /* builder map index */
- for (row = 0; row < nrows; row++)
- {
- CELL c;
-
- G_percent(row, nrows, 2);
- for (col = 0; col < ncols; col++)
- {
- c = ((CELL *) classify_vect[j]);
- ((CELL *) outrast)[col] = c;
- G_message("%d", c);
- j++;
- }
-
- if (G_put_raster_row(outfd, outrast, data_type) < 0)
- G_fatal_error(_("Failed writing raster map <%s>"), result);
- }
-
-
- /* memory cleanup */
- for (i = 0; i <= nattributes; i++)
- G_close_cell(attributes[i].fd);
- G_close_cell(outfd);
-
- for (i = 0; i < nattributes; i++)
- G_free(attributes[i].buf);
-
- //G_free(outrast);
-
- G_message("End: %s, with %d cells.", G_date(), j);
- /* add command line incantation to history file */
- G_short_history(result, "raster", &history);
- G_command_history(&history);
- G_write_history(result, &history);
-
- exit(EXIT_SUCCESS);
-}
-
-/* dom 07 dic 2008 07:05:15 CET */
Deleted: grass-addons/grass6/raster/mcda/r.roughset/raccess.c
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/raccess.c 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/raccess.c 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,232 +0,0 @@
-
-/****************************************************************************
- *
- * MODULE: r.roughset
- * AUTHOR(S): GRASS module authors ad Rough Set Library (RSL) maintain:
- * G.Massei (g_massa at libero.it)-A.Boggia (boggia at unipg.it)
- * Rough Set Library (RSL) ver. 2 original develop:
- * M.Gawrys - J.Sienkiewicz
- *
- * PURPOSE: Geographics rough set analisys and knowledge discovery
- *
- * COPYRIGHT: (C) A.Boggia - G.Massei (2008)
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************
-
- FUNCTION OF ACCESS TO SYSTEM TABLES
-
- part of the ROUGH system written by M.Gawrys J. Sienkiewicz
-
-****************************************************************************/
-
-
-#include "rough.h"
-
-setA _table_element = NULL;
-setA _table_end = NULL;
-int _table_row;
-int _table_column;
-int _table_no;
-
-static void (*_current_next) (void);
-
-void next_of_d(void)
-{
- if (++_table_column >= _table_row)
- _table_column = 0, _table_row++;
- _table_element = (_mainsys->matD) + (_mainsys->setAsize * ++_table_no);
-}
-
-void next_of_x(void)
-{
- _table_element += _mainsys->setAsize;
- ++_table_no;
-}
-
-void next_of_a(void)
-{
- ++_table_no;
- if (++_table_column >= _table_row)
- {
- _table_column = 0;
- if (++_table_row >= _mainsys->objects_num)
- {
- CloseSetA(_table_element);
- _table_end = _table_element;
- _table_row = 0;
- return;
- }
- }
- GetDfromA(_table_element, _table_row, _table_column);
- return;
-}
-
-
-int start_of_tab(int matrix_type)
-{
- if (matrix_type == MATD)
- {
- _table_no = 0;
- _table_row = 1;
- _table_column = 0;
- _table_element = _mainsys->matD;
- _table_end = _table_element + Dsize(_mainsys);
- _current_next = next_of_d;
- }
- else if (matrix_type == MATX)
- {
- START_OF_X;
- _table_no = 0;
- _current_next = next_of_x;
- }
- else if (matrix_type == MATA)
- {
- _table_no = 0;
- _table_row = 0;
- _table_column = 0;
- _table_element = InitEmptySetA();
- _table_end = _table_element + 1;
- _current_next = next_of_a;
- next_of_a();
- }
- if (_table_element == NULL)
- ERROR(3)
- return (1);
-}
-
-int end_of_tab(void)
-{
- return (_table_element < _table_end);
-}
-
-void next_of_tab(void)
-{
- (*_current_next) ();
-}
-
-
-setA GetD(int ob1, int ob2)
-{
- int pom;
-
- if (ob2 > ob1)
- {
- pom = ob1;
- ob1 = ob2;
- ob2 = pom;
- }
- return (_mainsys->matD) + ((ob1 - 1) * ob1 / 2 +
- ob2) * _mainsys->setAsize;
-}
-
-value_type GetA(int ob, int atr)
-{
- return (_mainsys->matA)[ob * (_mainsys->attributes_num) + atr];
-}
-
-int GetDfromA(setA elem, int obj1, int obj2)
-{
- int nby = (_mainsys->attributes_num) / _cluster_bits; /* number of full clusters in element */
- int nbi = _mainsys->attributes_num % _cluster_bits; /* number of bits in the last cluster */
- int atrnum = _mainsys->attributes_num; /* number of attributes */
- value_type *A = _mainsys->matA;
- cluster_type val;
- int cluster, bit;
-
- for (cluster = 0; cluster < nby; cluster++)
- {
- val = 0;
- for (bit = 0; bit < _cluster_bits; bit++)
- if (A[obj1 * atrnum + _cluster_bits * cluster + bit] !=
- A[obj2 * atrnum + _cluster_bits * cluster + bit] &&
- A[obj1 * atrnum + _cluster_bits * cluster + bit] !=
- (value_type) - 1 &&
- A[obj2 * atrnum + _cluster_bits * cluster + bit] !=
- (value_type) - 1)
- val = val | _mask[bit];
- elem[cluster] = val;
- }
- if (nbi)
- {
- val = 0;
- for (bit = 0; bit < nbi; bit++)
- if (A[obj1 * atrnum + _cluster_bits * cluster + bit] !=
- A[obj2 * atrnum + _cluster_bits * cluster + bit] &&
- A[obj1 * atrnum + _cluster_bits * cluster + bit] !=
- (value_type) - 1 &&
- A[obj2 * atrnum + _cluster_bits * cluster + bit] !=
- (value_type) - 1)
- val = val | _mask[bit];
- elem[cluster] = val;
- }
- return 1;
-}
-
-int CompareA(int ob1, int ob2, setA P)
-{
- int attr;
-
- for (attr = 0; attr < _mainsys->attributes_num; attr++)
- if (ContSetA(P, attr))
- if ((_mainsys->matA)[ob1 * (_mainsys->attributes_num) + attr] ==
- (value_type) - 1 ||
- (_mainsys->matA)[ob2 * (_mainsys->attributes_num) + attr] ==
- (value_type) - 1)
- continue;
- else if ((_mainsys->matA)[ob1 * (_mainsys->attributes_num) +
- attr] !=
- (_mainsys->matA)[ob2 * (_mainsys->attributes_num) +
- attr])
- return 0;
- return 1;
-}
-
-int CompareD(int ob1, int ob2, setA P)
-{
- int pom;
- int cluster;
- setA elem;
-
- if (ob2 > ob1)
- {
- pom = ob1;
- ob1 = ob2;
- ob2 = pom;
- }
- elem =
- (_mainsys->matD) + ((ob1 - 1) * ob1 / 2 + ob2) * (_mainsys->setAsize);
- for (cluster = _mainsys->setAsize - 1; cluster >= 0; cluster--)
- if (elem[cluster] & P[cluster])
- return 0;
- return 1;
-}
-
-int SingCompA(int ob1, int ob2, int atr)
-{
- return ((_mainsys->matA)[ob1 * (_mainsys->attributes_num) + atr] ==
- (_mainsys->matA)[ob2 * (_mainsys->attributes_num) + atr] ||
- (_mainsys->matA)[ob1 * (_mainsys->attributes_num) + atr] ==
- (value_type) - 1 ||
- (_mainsys->matA)[ob2 * (_mainsys->attributes_num) + atr] ==
- (value_type) - 1);
-}
-
-int SingCompD(int ob1, int ob2, int atr)
-{
- int pom;
-
- if (ob2 > ob1)
- {
- pom = ob1;
- ob1 = ob2;
- ob2 = pom;
- }
- return !((_mainsys->matD)[((ob1 - 1) * ob1 / 2 + ob2)
- * (_mainsys->setAsize) +
- atr / _cluster_bits] & _mask[atr %
- _cluster_bits]);
-}
Deleted: grass-addons/grass6/raster/mcda/r.roughset/raccess.h
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/raccess.h 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/raccess.h 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,77 +0,0 @@
-
-/****************************************************************************
- *
- * MODULE: r.roughset
- * AUTHOR(S): GRASS module authors ad Rough Set Library (RSL) maintain:
- * G.Massei (g_massa at libero.it)-A.Boggia (boggia at unipg.it)
- * Rough Set Library (RSL) ver. 2 original develop:
- * M.Gawrys - J.Sienkiewicz
- *
- * PURPOSE: Geographics rough set analisys and knowledge discovery
- *
- * COPYRIGHT: (C) GRASS Development Team (2008)
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************/
-
-/*** ***/
-
-/*** FUNCTIONS OF ACCESS TO SYSTEM TABLES ***/
-
-/*** ***/
-
-/*** part of the RSL system written by M.Gawrys J. Sienkiewicz ***/
-
-/*** ***/
-
-/*****************************************************************************/
-
-
-#define START_OF_D _table_element=_mainsys->matD,_table_end=_table_element+Dsize(_mainsys)
-#define START_OF_X _table_element=_mainsys->matX,_table_end=_table_element+_mainsys->matXsize
-#define START_OF_MAT(set,num) _table_element=(set),_table_end=_table_element+(num)*_mainsys->setAsize
-#define END_OF_MAT (_table_element<_table_end)
-#define NEXT_OF_MAT _table_element+=_mainsys->setAsize
-#define ELEM_OF_MAT _table_element
-#define ElemOfRule(rules,num,attr) (rules)[(num)*(_mainsys->attributes_num)+(attr)]
-
-extern setA _table_element;
-extern setA _table_end;
-extern int _table_row;
-extern int _table_column;
-extern int _table_no;
-
-
-int start_of_tab(int matrix_type);
-void next_of_tab(void);
-int end_of_tab(void);
-
-
-int CompareA(int ob1, int ob2, setA P);
-int CompareD(int ob1, int ob2, setA P);
-
- /* compares two objects, returns 1 if all attributes from */
- /* the set P are identical, otherwise returns 0 */
-
-int SingCompA(int ob1, int ob2, int atr);
-int SingCompD(int ob1, int ob2, int atr);
-
- /* compares two objects on the sigle attribute atr */
- /* returns 1 if identical, otherwise returns 0 */
-
-setA GetD(int ob1, int ob2);
-
- /* returns a single element of matrix D, if this set */
- /* is going to be changed, it has to be first copied */
-
-value_type GetA(int obj, int atr);
-
- /* returns value of attribute atr of object obj */
- /* from matrix A */
-
-int GetDfromA(setA elem, int ob1, int ob2);
-
- /* generate a single element of matrix D into elem */
Deleted: grass-addons/grass6/raster/mcda/r.roughset/rbasic.c
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/rbasic.c 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/rbasic.c 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,631 +0,0 @@
-
-/****************************************************************************
- *
- * MODULE: r.roughset
- * AUTHOR(S): GRASS module authors ad Rough Set Library (RSL) maintain:
- * G.Massei (g_massa at libero.it)-A.Boggia (boggia at unipg.it)
- * Rough Set Library (RSL) ver. 2 original develop:
- * M.Gawrys - J.Sienkiewicz
- *
- * PURPOSE: Geographics rough set analisys and knowledge discovery
- *
- * COPYRIGHT: (C) A.Boggia - G.Massei (2008)
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************/
-/*** ***/
-/*** BASIC QUERIES FOR ACTIVE SYSTEM ***/
-/*** ***/
-/*** part of the RSL system written by M.Gawrys J.Sienkiewicz ***/
-/*** ***/
-/*****************************************************************************/
-
-
-#include "rough.h"
-
-int LowAppr(setO lowappr, setO X, setA P, int matrix_type)
-{
- switch (matrix_type)
- {
- case MATA:
- return LowApprA(lowappr, X, P);
- case MATD:
- return LowApprD(lowappr, X, P);
- default:
- ERROR(8)
- }
-}
-
-int LowApprA(setO lowappr, setO X, setA P)
-{
- setO notX;
- int ob1, ob2, disc;
-
- if (_mainsys->matA == NULL)
- ERROR(5);
- notX = InitEmptySetO();
- ClearSetO(lowappr);
- NotSetO(notX, X);
- for (ob1 = 0; ob1 < _mainsys->objects_num; ob1++)
- if (ContSetO(X, ob1))
- {
- disc = 1;
- for (ob2 = 0; ob2 < _mainsys->objects_num; ob2++)
- if (ContSetO(notX, ob2))
- if (CompareA(ob1, ob2, P))
- {
- disc = 0;
- break;
- }
- if (disc)
- AddSetO(lowappr, ob1);
- }
- CloseSetO(notX);
- return 0;
-}
-
-int LowApprD(setO lowappr, setO X, setA P)
-{
- setO notX;
- int ob1, ob2, disc;
-
- if (_mainsys->matD == NULL)
- ERROR(6);
- notX = InitEmptySetO();
- ClearSetO(lowappr);
- NotSetO(notX, X);
- for (ob1 = 0; ob1 < _mainsys->objects_num; ob1++)
- if (ContSetO(X, ob1))
- {
- disc = 1;
- for (ob2 = 0; ob2 < _mainsys->objects_num; ob2++)
- if (ContSetO(notX, ob2))
- if (CompareD(ob1, ob2, P))
- {
- disc = 0;
- break;
- }
- if (disc)
- AddSetO(lowappr, ob1);
- }
- CloseSetO(notX);
- return 0;
-}
-
-int UppAppr(setO uppappr, setO X, setA P, int matrix_type)
-{
- switch (matrix_type)
- {
- case MATA:
- return UppApprA(uppappr, X, P);
- case MATD:
- return UppApprD(uppappr, X, P);
- default:
- ERROR(8)
- }
-}
-
-int UppApprA(setO uppappr, setO X, setA P)
-{
- setO notX;
- int ob1, ob2;
-
- if (_mainsys->matA == NULL)
- ERROR(5);
- CopySetO(uppappr, X);
- notX = InitEmptySetO();
- NotSetO(notX, X);
- for (ob1 = 0; ob1 < _mainsys->objects_num; ob1++)
- if (ContSetO(X, ob1))
- for (ob2 = 0; ob2 < _mainsys->objects_num; ob2++)
- if (ContSetO(notX, ob2))
- if (CompareA(ob1, ob2, P))
- AddSetO(uppappr, ob2);
- CloseSetO(notX);
- return 0;
-}
-
-int UppApprD(setO uppappr, setO X, setA P)
-{
- setO notX;
- int ob1, ob2;
-
- if (_mainsys->matD == NULL)
- ERROR(6);
- CopySetO(uppappr, X);
- notX = InitEmptySetO();
- NotSetO(notX, X);
- for (ob1 = 0; ob1 < _mainsys->objects_num; ob1++)
- if (ContSetO(X, ob1))
- for (ob2 = 0; ob2 < _mainsys->objects_num; ob2++)
- if (ContSetO(notX, ob2))
- if (CompareD(ob1, ob2, P))
- AddSetO(uppappr, ob2);
- CloseSetO(notX);
- return 0;
-}
-
-int Bound(setO bound, setO X, setA P, int matrix_type)
-{
- switch (matrix_type)
- {
- case MATA:
- return BoundA(bound, X, P);
- case MATD:
- return BoundD(bound, X, P);
- default:
- ERROR(8)
- }
-}
-
-int BoundA(setO bound, setO X, setA P)
-{
- setO lower, upper;
-
- if (_mainsys->matA == NULL)
- ERROR(5);
- lower = InitEmptySetO();
- upper = InitEmptySetO();
- LowApprA(lower, X, P);
- UppApprA(upper, X, P);
- DifSetO(bound, upper, lower);
- CloseSetO(lower);
- CloseSetO(upper);
- return 0;
-}
-
-int BoundD(setO bound, setO X, setA P)
-{
- setO lower, upper;
-
- if (_mainsys->matD == NULL)
- ERROR(6);
- lower = InitEmptySetO();
- upper = InitEmptySetO();
- LowApprD(lower, X, P);
- UppApprD(upper, X, P);
- DifSetO(bound, upper, lower);
- CloseSetO(lower);
- CloseSetO(upper);
- return 0;
-}
-
-float AccurCoef(setO X, setA P, int matrix_type)
-{
- switch (matrix_type)
- {
- case MATA:
- return AccurCoefA(X, P);
- case MATD:
- return AccurCoefD(X, P);
- default:
- ERROR(8)
- }
-}
-
-float AccurCoefA(setO X, setA P)
-{
- setO lower, upper;
- float coef;
-
- if (_mainsys->matA == NULL)
- ERROR(5);
- lower = InitEmptySetO();
- upper = InitEmptySetO();
- LowApprA(lower, X, P);
- UppApprA(upper, X, P);
- coef = (float)CardSetO(lower) / (float)CardSetO(upper);
- CloseSetO(lower);
- CloseSetO(upper);
- return coef;
-}
-
-float AccurCoefD(setO X, setA P)
-{
- setO lower, upper;
- float coef;
-
- if (_mainsys->matD == NULL)
- ERROR(6);
- lower = InitEmptySetO();
- upper = InitEmptySetO();
- LowApprD(lower, X, P);
- UppApprD(upper, X, P);
- coef = (float)CardSetO(lower) / (float)CardSetO(upper);
- CloseSetO(lower);
- CloseSetO(upper);
- return coef;
-}
-
-float ClassCoef(setO X, setA P, int matrix_type)
-{
- switch (matrix_type)
- {
- case MATA:
- return ClassCoefA(X, P);
- case MATD:
- return ClassCoefD(X, P);
- default:
- ERROR(8)
- }
-}
-
-float ClassCoefA(setO X, setA P)
-{
- float coef;
- setO notX, pos;
- int ob1, ob2;
-
- if (_mainsys->matA == NULL)
- ERROR(5);
- notX = InitEmptySetO();
- pos = InitFullSetO();
- NotSetO(notX, X);
- for (ob1 = 0; ob1 < _mainsys->objects_num; ob1++)
- for (ob2 = 0; ob2 < _mainsys->objects_num; ob2++)
- if (ContSetO(X, ob1) && ContSetO(notX, ob2) &&
- CompareA(ob1, ob2, P))
- {
- DelSetO(pos, ob1);
- DelSetO(pos, ob2);
- }
- coef = (float)CardSetO(pos) / _mainsys->objects_num;
- CloseSetO(notX);
- CloseSetO(pos);
- return coef;
-}
-
-float ClassCoefD(setO X, setA P)
-{
- float coef;
- setO notX, pos;
- int ob1, ob2;
-
- if (_mainsys->matD == NULL)
- ERROR(6);
- notX = InitEmptySetO();
- pos = InitFullSetO();
- NotSetO(notX, X);
- for (ob1 = 0; ob1 < _mainsys->objects_num; ob1++)
- for (ob2 = 0; ob2 < _mainsys->objects_num; ob2++)
- if (ContSetO(X, ob1) && ContSetO(notX, ob2) &&
- CompareD(ob1, ob2, P))
- {
- DelSetO(pos, ob1);
- DelSetO(pos, ob2);
- }
- CloseSetO(notX);
- coef = (float)CardSetO(pos) / _mainsys->objects_num;
- CloseSetO(pos);
- return coef;
-}
-
-int Pos(setO pos, setA P, setA Q, int matrix_type)
-{
- switch (matrix_type)
- {
- case MATA:
- return PosA(pos, P, Q);
- case MATD:
- return PosD(pos, P, Q);
- default:
- ERROR(8)
- }
-}
-
-int PosA(setO pos, setA P, setA Q)
-{
- int i, j;
- setA redQ;
-
- if (_mainsys->matA == NULL)
- ERROR(5);
- if (IsEmptySetA(P))
- {
- ClearSetO(pos);
- return 0;
- }
- redQ = InitEmptySetA();
- DifSetA(redQ, Q, P);
- FillSetO(pos);
- if (IsEmptySetA(redQ))
- return 0;
- for (i = _mainsys->objects_num - 1; i > 0; i--)
- for (j = i - 1; j >= 0; j--)
- if (!CompareA(i, j, redQ) && CompareA(i, j, P))
- {
- DelSetO(pos, i);
- DelSetO(pos, j);
- }
- return 0;
-}
-
-int PosD(setO pos, setA P, setA Q)
-{
- int i, j;
- setA elem, redQ;
-
- if (_mainsys->matD == NULL)
- ERROR(6);
- if (IsEmptySetA(P))
- {
- ClearSetO(pos);
- return 0;
- }
- redQ = InitEmptySetA();
- DifSetA(redQ, Q, P);
- FillSetO(pos);
- if (IsEmptySetA(redQ))
- return 0;
- for (i = _mainsys->objects_num - 1; i > 0; i--)
- for (j = i - 1; j >= 0; j--)
- {
- elem = GetD(i, j);
- if (InterSetA(elem, redQ) && !InterSetA(elem, P))
- {
- DelSetO(pos, i);
- DelSetO(pos, j);
- }
- }
- CloseSetA(redQ);
- return 0;
-}
-
-float DependCoef(setA P, setA Q, int matrix_type)
-{
- switch (matrix_type)
- {
- case MATA:
- return DependCoefA(P, Q);
- case MATD:
- return DependCoefD(P, Q);
- default:
- ERROR(8)
- }
-}
-
-float DependCoefA(setA P, setA Q)
-{
- setO pos;
- float coef;
-
- if (_mainsys->matA == NULL)
- ERROR(5);
- pos = InitEmptySetO();
- PosA(pos, P, Q);
- coef = (float)CardSetO(pos) / (float)_mainsys->objects_num;
- CloseSetO(pos);
- return coef;
-}
-
-float DependCoefD(setA P, setA Q)
-{
- setO pos;
- float coef;
-
- if (_mainsys->matD == NULL)
- ERROR(6);
- pos = InitEmptySetO();
- PosD(pos, P, Q);
- coef = (float)CardSetO(pos) / (float)_mainsys->objects_num;
- CloseSetO(pos);
- return coef;
-}
-
-float SignifCoef(int attr, setA P, int matrix_type)
-{
- switch (matrix_type)
- {
- case MATA:
- return SignifCoefA(attr, P);
- case MATD:
- return SignifCoefD(attr, P);
- default:
- ERROR(8)
- }
-}
-
-float SignifCoefA(int attr, setA P)
-{
- setO pos1, pos2;
- setA Pprim;
- int i, j;
- float coef;
-
- if (_mainsys->matA == NULL)
- ERROR(5);
- if (IsEmptySetA(P) || !ContSetA(P, attr))
- return 0;
- pos1 = InitFullSetO();
- pos2 = InitFullSetO();
- Pprim = InitEmptySetA();
- CopySetA(Pprim, P);
- DelSetA(Pprim, attr);
- for (i = _mainsys->objects_num - 1; i > 0; i--)
- for (j = i - 1; j >= 0; j--)
- if (CompareA(i, j, P))
- {
- DelSetO(pos1, i);
- DelSetO(pos2, i);
- DelSetO(pos1, j);
- DelSetO(pos2, j);
- continue;
- }
- else if (CompareA(i, j, Pprim))
- {
- DelSetO(pos2, i);
- DelSetO(pos2, j);
- }
- DifSetO(pos1, pos1, pos2);
- coef = (float)CardSetO(pos1) / (float)_mainsys->objects_num;
- CloseSetO(pos1);
- CloseSetO(pos2);
- CloseSetA(Pprim);
- return coef;
-}
-
-float SignifCoefD(int attr, setA P)
-{
- setO pos1, pos2;
- setA Pprim, elem;
- int i, j;
- float coef;
-
- if (_mainsys->matD == NULL)
- ERROR(6);
- if (IsEmptySetA(P) || !ContSetA(P, attr))
- return 0;
- pos1 = InitFullSetO();
- pos2 = InitFullSetO();
- Pprim = InitEmptySetA();
- CopySetA(Pprim, P);
- DelSetA(Pprim, attr);
- for (i = _mainsys->objects_num - 1; i > 0; i--)
- for (j = i - 1; j >= 0; j--)
- {
- elem = GetD(i, j);
- if (!InterSetA(elem, P))
- {
- DelSetO(pos1, i);
- DelSetO(pos2, i);
- DelSetO(pos1, j);
- DelSetO(pos2, j);
- continue;
- }
- if (!InterSetA(elem, Pprim))
- {
- DelSetO(pos2, i);
- DelSetO(pos2, j);
- }
- }
- DifSetO(pos1, pos1, pos2);
- coef = (float)CardSetO(pos1) / (float)_mainsys->objects_num;
- CloseSetO(pos1);
- CloseSetO(pos2);
- CloseSetA(Pprim);
- return coef;
-}
-
-float SignifRelCoef(int attr, setA P, setA Q, int matrix_type)
-{
- switch (matrix_type)
- {
- case MATA:
- return SignifRelCoefA(attr, P, Q);
- case MATD:
- return SignifRelCoefD(attr, P, Q);
- default:
- ERROR(8)
- }
-}
-
-float SignifRelCoefA(int attr, setA P, setA Q)
-{
- setO pos1, pos2;
- setA Pprim, redQ;
- int i, j;
- float coef;
-
- if (_mainsys->matA == NULL)
- ERROR(5);
- Pprim = InitEmptySetA();
- redQ = InitEmptySetA();
- CopySetA(Pprim, P);
- DelSetA(Pprim, attr);
- DifSetA(redQ, Q, Pprim);
- if (IsEmptySetA(P) || !ContSetA(P, attr))
- return 0;
- if (IsEmptySetA(redQ))
- return 1;
- pos1 = InitFullSetO();
- pos2 = InitFullSetO();
- for (i = _mainsys->objects_num - 1; i > 0; i--)
- for (j = i - 1; j >= 0; j--)
- if (CompareA(i, j, redQ))
- continue;
- else if (CompareA(i, j, P))
- {
- DelSetO(pos1, i);
- DelSetO(pos2, i);
- DelSetO(pos1, j);
- DelSetO(pos2, j);
- continue;
- }
- else if (CompareA(i, j, Pprim))
- {
- DelSetO(pos2, i);
- DelSetO(pos2, j);
- }
- DifSetO(pos1, pos1, pos2);
- coef = (float)CardSetO(pos1) / (float)_mainsys->objects_num;
- CloseSetO(pos1);
- CloseSetO(pos2);
- CloseSetA(Pprim);
- CloseSetA(redQ);
- return coef;
-}
-
-float SignifRelCoefD(int attr, setA P, setA Q)
-{
- setO pos1, pos2;
- setA Pprim, redQ, elem;
- int i, j;
- float coef;
-
- if (_mainsys->matD == NULL)
- ERROR(6);
- Pprim = InitEmptySetA();
- redQ = InitEmptySetA();
- CopySetA(Pprim, P);
- DelSetA(Pprim, attr);
- DifSetA(redQ, Q, Pprim);
- if (IsEmptySetA(P) || !ContSetA(P, attr))
- return 0;
- if (IsEmptySetA(redQ))
- return 1;
- pos1 = InitFullSetO();
- pos2 = InitFullSetO();
- for (i = _mainsys->objects_num - 1; i > 0; i--)
- for (j = i - 1; j >= 0; j--)
- {
- elem = GetD(i, j);
- if (!InterSetA(elem, redQ))
- continue;
- if (!InterSetA(elem, P))
- {
- DelSetO(pos1, i);
- DelSetO(pos2, i);
- DelSetO(pos1, j);
- DelSetO(pos2, j);
- continue;
- }
- if (!InterSetA(elem, Pprim))
- {
- DelSetO(pos2, i);
- DelSetO(pos2, j);
- }
- }
- DifSetO(pos1, pos1, pos2);
- coef = (float)CardSetO(pos1) / (float)_mainsys->objects_num;
- CloseSetO(pos1);
- CloseSetO(pos2);
- CloseSetA(Pprim);
- CloseSetA(redQ);
- return coef;
-}
-
-
-int CardCoef(setA P, int matrix_type)
-{
- int res = 0;
-
- for (start_of_tab(matrix_type); end_of_tab(); next_of_tab())
- if (InterSetA(P, _table_element))
- res++;
- if (_rerror > 0)
- return -_rerror;
- return res;
-}
Deleted: grass-addons/grass6/raster/mcda/r.roughset/rbasic.h
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/rbasic.h 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/rbasic.h 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,99 +0,0 @@
-
-/****************************************************************************
- *
- * MODULE: r.roughset
- * AUTHOR(S): GRASS module authors ad Rough Set Library (RSL) maintain:
- * G.Massei (g_massa at libero.it)-A.Boggia (boggia at unipg.it)
- * Rough Set Library (RSL) ver. 2 original develop:
- * M.Gawrys - J.Sienkiewicz
- *
- * PURPOSE: Geographics rough set analisys and knowledge discovery
- *
- * COPYRIGHT: (C) GRASS Development Team (2008)
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************/
-
-/*** ***/
-
-/*** BASIC QUERRIES FOR SYSTEM ***/
-
-/*** ***/
-
-/*** part of the RSL system written by M.Gawrys J.Sienkiewicz ***/
-
-/*** ***/
-
-/*****************************************************************************/
-
-
-/* If a function from this section value a set, this set should be */
-/* first initialized and then given to the function as a first */
-/* argument. Functions from this group does not work on matrix X. */
-
-int LowAppr(setO appr, setO X, setA P, int matrix_type);
-int LowApprA(setO appr, setO X, setA P);
-int LowApprD(setO appr, setO X, setA P);
-
- /* P-lower approximation of X */
-
-int UppAppr(setO appr, setO X, setA P, int matrix_type);
-int UppApprA(setO appr, setO X, setA P);
-int UppApprD(setO appr, setO X, setA P);
-
- /* P-upper appriximation of X */
-
-int Bound(setO bound, setO X, setA P, int matrix_type);
-int BoundA(setO bound, setO X, setA P);
-int BoundD(setO bound, setO X, setA P);
-
- /* P-boundary of X */
-
-float AccurCoef(setO X, setA P, int matrix_type);
-float AccurCoefA(setO X, setA P);
-float AccurCoefD(setO X, setA P);
-
- /* Accuracy coefficient of X with respect to P */
-
-float ClassCoef(setO X, setA P, int matrix_type);
-float ClassCoefA(setO X, setA P);
-float ClassCoefD(setO X, setA P);
-
- /* quality of classification (X,not X) */
- /* with respect to P */
-
-int Pos(setO pos, setA P, setA Q, int matrix_type);
-int PosA(setO pos, setA P, setA Q);
-int PosD(setO pos, setA P, setA Q);
-
- /* P-positive region of Q */
-
-float DependCoef(setA P, setA Q, int matrix_type);
-float DependCoefA(setA P, setA Q);
-float DependCoefD(setA P, setA Q);
-
- /* degree of dependency Q from P */
-
-float SignifCoef(int attr, setA P, int matrix_type);
-float SignifCoefA(int attr, setA P);
-float SignifCoefD(int attr, setA P);
-
- /* significance of attribute attr */
- /* in the set P */
-
-float SignifRelCoef(int attr, setA P, setA Q, int matrix_type);
-float SignifRelCoefA(int attr, setA P, setA Q);
-float SignifRelCoefD(int attr, setA P, setA Q);
-
- /* significance of attribute attr */
- /* in the set P, relatively to Q */
-
-
-int CardCoef(setA P, int matrix_type);
-
- /* returns number of matrix fields */
- /* covered by P (MATA is treated as MATD) */
- /* but elements are evaluated "on-line" */
Deleted: grass-addons/grass6/raster/mcda/r.roughset/rclass.c
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/rclass.c 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/rclass.c 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,248 +0,0 @@
-
-/****************************************************************************
- *
- * MODULE: r.roughset
- * AUTHOR(S): GRASS module authors ad Rough Set Library (RSL) maintain:
- * G.Massei (g_massa at libero.it)-A.Boggia (boggia at unipg.it)
- * Rough Set Library (RSL) ver. 2 original develop:
- * M.Gawrys - J.Sienkiewicz
- *
- * PURPOSE: Geographics rough set analisys and knowledge discovery
- *
- * COPYRIGHT: (C) A.Boggia - G.Massei (2008)
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************/
-/*** ***/
-/*** SOME MORE QUERIES FOR SYSTEM ***/
-/*** ( CLASSIFICATION ) ***/
-/*** ***/
-/*** part of the RSL system written by M.Gawrys J.Sienkiewicz ***/
-/*** ***/
-/*****************************************************************************/
-
-
-#include <stdlib.h>
-#include "rough.h"
-
-
-int DecisionEQ(value_type * rule1, value_type * rule2, setA Q)
-{
- int i;
-
- for (i = 0; i < _mainsys->attributes_num; i++)
- if (ContSetA(Q, i))
- if (rule1[i] != rule2[i])
- return 0;
- return 1;
-}
-
-
-int StrengthOfRule(value_type * rule)
-{
- int obj, attr, find, result = 0, size = _mainsys->attributes_num;
-
- for (obj = 0; obj < _mainsys->objects_num; obj++)
- {
- find = 1;
- for (attr = 0; attr < size; attr++)
- if (rule[attr] != GetA(obj, attr))
- if (rule[attr] != MINUS && GetA(obj, attr) != MINUS)
- {
- find = 0;
- break;
- }
- if (find)
- result++;
- }
- return result;
-}
-
-int *StrengthOfRules(value_type * rules, int N)
-{
- int *result;
- int i, size = _mainsys->attributes_num;
-
- if (N <= 0)
- return NULL;
- result = (int *)calloc(N, sizeof(int));
- for (i = 0; i < N; i++)
- result[i] = StrengthOfRule(rules + i * size);
- return result;
-}
-
-
-int ObjectsForRule(setO set, value_type * rule)
-{
- int i, j, find, size = _mainsys->attributes_num;
-
- for (i = 0; i < _mainsys->objects_num; i++)
- {
- find = 1;
- for (j = 0; j < size; j++)
- if (rule[j] != GetA(i, j))
- if (rule[j] != MINUS && GetA(i, j) != MINUS)
- {
- find = 0;
- break;
- }
- if (find)
- AddSetO(set, i);
- }
- return CardSetO(set);
-}
-
-
-int CompareToRule(value_type * sample, value_type * rule, setA P)
-{
- int j, result = 0, size = _mainsys->attributes_num;
-
- for (j = 0; j < size; j++)
- {
- if (!ContSetA(P, j))
- continue;
- if (rule[j] != sample[j])
- if (rule[j] != MINUS && sample[j] != MINUS)
- result++;
- }
- return result;
-}
-
-
-int *CompareToRules(value_type * sample, value_type * rules, int N, setA P)
-{
- int *result;
- int i, size = _mainsys->attributes_num;
-
- if (N <= 0)
- return NULL;
- result = (int *)calloc(N, sizeof(int));
- for (i = 0; i < N; i++)
- result[i] = CompareToRule(sample, rules + i * size, P);
- return result;
-}
-
-
-int Classify1(value_type * sample, value_type * rules, int N, setA P, setA Q)
-{
- int done = 0,
- result = -1,
- count = 0,
- *diff, minDiff = _mainsys->attributes_num,
- i, j = 0, max = 0, size = _mainsys->attributes_num;
- diff = CompareToRules(sample, rules, N, P);
- for (i = 0; i < N; i++)
- if (diff[i] < minDiff)
- minDiff = diff[i];
- while (!done) /* while there is an unprocessed rule */
- {
- while (diff[j] != minDiff)
- j++; /* to find the rule with new decision */
- done = 1;
- diff[j]++;
- count = 1;
- for (i = j; i < N; i++)
- if (diff[i] == minDiff)
- if (DecisionEQ(rules + i * size, rules + j * size, Q))
- {
- diff[j]++; /* to protect from next use */
- count++;
- }
- else
- done = 0;
- if (count > max)
- max = count, result = j;
- }
- free(diff);
- return result;
-}
-
-
-int Classify2(value_type * sample, value_type * rules, int N, setA P, setA Q)
-{
- int i,
- *diff,
- first = 0, maxindex,
- size = _mainsys->attributes_num,
- minDiff = _mainsys->attributes_num, done = 0;
- setO cover, maxcover, rulecover;
-
- cover = InitEmptySetO();
- maxcover = InitEmptySetO();
- rulecover = InitEmptySetO();
- diff = CompareToRules(sample, rules, N, P);
- for (i = 0; i < N; i++)
- if (diff[i] < minDiff)
- minDiff = diff[i];
- while (!done) /* while there is an unprocessed rule */
- {
- while (diff[first] != minDiff)
- first++; /* to find the rule with new decision */
- done = 1;
- diff[first]++; /* to protect from next use */
- ObjectsForRule(cover, rules + first * size);
- for (i = first; i < N; i++)
- if (diff[i] == minDiff)
- if (DecisionEQ(rules + first * size, rules + i * size, Q))
- {
- diff[i]++;
- ObjectsForRule(rulecover, rules + i * size);
- OrSetO(cover, cover, rulecover);
- }
- else
- done = 0;
- if (CardSetO(maxcover) < CardSetO(cover))
- {
- CopySetO(maxcover, cover);
- maxindex = first;
- }
- }
- free(diff);
- CloseSetO(cover);
- CloseSetO(maxcover);
- CloseSetO(rulecover);
- return maxindex;
-}
-
-int Classify3(value_type * sample, value_type * rules, int N,
- int *strength, setA P, setA Q)
-{
- int i,
- *diff,
- first = 0, maxindex,
- size = _mainsys->attributes_num,
- minDiff = _mainsys->attributes_num, done = 0;
- int cover, maxcover = 0;
-
- diff = CompareToRules(sample, rules, N, P);
- for (i = 0; i < N; i++)
- if (diff[i] < minDiff)
- minDiff = diff[i];
- while (!done) /* while there is an unprocessed rule */
- {
- while (diff[first] != minDiff)
- first++; /* to find the rule with new decision */
- done = 1;
- diff[first]++; /* to protect from next use */
- cover = strength[first];
- for (i = first; i < N; i++)
- if (diff[i] == minDiff)
- if (DecisionEQ(rules + first * size, rules + i * size, Q))
- {
- diff[i]++;
- cover += strength[i];
- }
- else
- done = 0;
- if (maxcover < cover)
- {
- maxcover = cover;
- maxindex = first;
- }
- }
- free(diff);
- return maxindex;
-}
Deleted: grass-addons/grass6/raster/mcda/r.roughset/rclass.h
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/rclass.h 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/rclass.h 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,82 +0,0 @@
-
-/****************************************************************************
- *
- * MODULE: r.roughset
- * AUTHOR(S): GRASS module authors ad Rough Set Library (RSL) maintain:
- * G.Massei (g_massa at libero.it)-A.Boggia (boggia at unipg.it)
- * Rough Set Library (RSL) ver. 2 original develop:
- * M.Gawrys - J.Sienkiewicz
- *
- * PURPOSE: Geographics rough set analisys and knowledge discovery
- *
- * COPYRIGHT: (C) GRASS Development Team (2008)
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************/
-
-/*** ***/
-
-/*** SOME MORE QUERIES FOR SYSTEM ***/
-
-/*** ( CLASSIFICATION ) ***/
-
-/*** ***/
-
-/*** part of the RSL system written by M.Gawrys J.Sienkiewicz ***/
-
-/*** ***/
-
-/*****************************************************************************/
-
-
-int DecisionEQ(value_type * rule1, value_type * rule2, setA Q);
-
- /* compares decisions of two rules */
- /* returns 1 if equal */
-
-int StrengthOfRule(value_type * rule);
-
- /* return a number of objects covered by rule (strength) */
-
-int *StrengthOfRules(value_type * rules, int N);
-
- /* creates a table of rules strengths */
- /* allocates memory, size = N * sizeof(int) */
-
-int ObjectsForRule(setO set, value_type * rule);
-
- /* finds a set of objects covered by rule */
-
-int CompareToRule(value_type * sample, value_type * rule, setA P);
-
- /* compares a sample with rule on a set of attributes */
- /* returns a number of dissimilar attributes (distance) */
-
-int *CompareToRules(value_type * sample, value_type * rules, int N, setA P);
-
- /* compares a sample with rules on a set of attributes */
- /* creates a table of distances (number of dissimilar attributes) */
- /* allocates memory, size = N * sizeof(int) */
-
-int Classify1(value_type * sample, value_type * rules, int N, setA P, setA Q);
-
- /* chooses the best rule to cover sample, strategy no. 1 */
- /* finds the most frequent decision among rules with minimal */
- /* distances from a given sample, returns index of a proper rule */
-
-int Classify2(value_type * sample, value_type * rules, int N, setA P, setA Q);
-
- /* chooses the best rule to cover sample, strategy no. 2 */
- /* finds a decision that covers the largerst number of objects */
- /* among rules with minimal distances from a given sample */
- /* returns index of a proper rule */
-
-int Classify3(value_type * sample, value_type * rules, int N,
- int *strength, setA P, setA Q);
- /* chooses the best rule to cover sample, strategy no. 3 */
- /* finds a decision with the largest total strength among */
- /* rules with minimal distances from a given sample */
- /* returns index of a proper rule */
Deleted: grass-addons/grass6/raster/mcda/r.roughset/rcore.c
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/rcore.c 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/rcore.c 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,364 +0,0 @@
-
-/****************************************************************************
- *
- * MODULE: r.roughset
- * AUTHOR(S): GRASS module authors ad Rough Set Library (RSL) maintain:
- * G.Massei (g_massa at libero.it)-A.Boggia (boggia at unipg.it)
- * Rough Set Library (RSL) ver. 2 original develop:
- * M.Gawrys - J.Sienkiewicz
- *
- * PURPOSE: Geographics rough set analisys and knowledge discovery
- *
- * COPYRIGHT: (C) A.Boggia - G.Massei (2008)
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************/
-/*** ***/
-/*** SOME MORE QUERIES FOR SYSTEM ***/
-/*** ( FINDING CORES AND CHECKING REDUCTS ) ***/
-/*** ***/
-/*** part of the RSL system written by M.Gawrys J.Sienkiewicz ***/
-/*** ***/
-/*****************************************************************************/
-
-
-#include "rough.h"
-#include <stdlib.h>
-
-
-int Core(setA core, int matrix_type)
-{
- switch (matrix_type)
- {
- case MATA:
- return CoreA(core);
- case MATD:
- return CoreDX(core, matrix_type);
- case MATX:
- return CoreDX(core, matrix_type);
- default:
- ERROR(8)
- }
-}
-
-int CoreA(setA core)
-{
- int ob1, ob2, attr, no1, pattr;
-
- if (_mainsys->matA == NULL)
- ERROR(5)
- ClearSetA(core);
- for (ob1 = _mainsys->objects_num - 1; ob1 > 0; ob1--)
- for (ob2 = ob1 - 1; ob2 >= 0; ob2--)
- {
- no1 = 0;
- for (attr = _mainsys->attributes_num - 1; attr >= 0; attr--)
- if (!SingCompA(ob1, ob2, attr))
- {
- no1++;
- if (no1 > 1)
- break;
- else
- pattr = attr;
- }
- if (no1 == 1)
- AddSetA(core, pattr);
- }
- return 0;
-}
-
-int CoreDX(setA core, int matrix_type)
-{
- int cluster, bit, flag, no1, pcluster;
-
- ClearSetA(core);
- if (matrix_type == MATD)
- {
- if (_mainsys->matD == NULL)
- ERROR(6)
- START_OF_D;
- }
- else
- {
- if (_mainsys->matX == NULL)
- ERROR(7)
- START_OF_X;
- }
- for (; END_OF_MAT; NEXT_OF_MAT)
- {
- flag = 0;
- no1 = 0;
- for (cluster = _mainsys->setAsize - 1; cluster >= 0; cluster--)
- {
- for (bit = 0; bit < _cluster_bits; bit++)
- if (_mask[bit] & ELEM_OF_MAT[cluster])
- {
- no1++;
- if (no1 > 1)
- {
- flag = 1;
- break;
- }
- else
- pcluster = cluster;
- }
- if (flag)
- break;
- }
- if (no1 == 1)
- core[pcluster] |= ELEM_OF_MAT[pcluster];
- }
- return 0;
-}
-
-int CoreRel(setA core, setA P, setA Q, int matrix_type)
-{
- switch (matrix_type)
- {
- case MATA:
- return CoreRelA(core, P, Q);
- case MATD:
- return CoreRelD(core, P, Q);
- default:
- ERROR(8)
- }
-}
-
-int CoreRelA(setA core, setA P, setA Q)
-{
- int ob1, ob2, attr, no1, pattr;
-
- if (_mainsys->matA == NULL)
- ERROR(5)
- ClearSetA(core);
- for (ob1 = _mainsys->objects_num - 1; ob1 > 0; ob1--)
- for (ob2 = ob1 - 1; ob2 >= 0; ob2--)
- if (!CompareA(ob1, ob2, Q))
- {
- no1 = 0;
- for (attr = _mainsys->attributes_num - 1; attr >= 0; attr--)
- if (ContSetA(P, attr))
- if (!SingCompA(ob1, ob2, attr))
- {
- no1++;
- if (no1 > 1)
- break;
- else
- pattr = attr;
- }
- if (no1 == 1)
- AddSetA(core, pattr);
- }
- return 0;
-}
-
-int CoreRelD(setA core, setA P, setA Q)
-{
- int cluster, bit, flag, no1, pcluster;
- setA elem;
-
- if (_mainsys->matD == NULL)
- ERROR(6)
- ClearSetA(core);
- elem = InitEmptySetA();
- for (START_OF_D; END_OF_MAT; NEXT_OF_MAT)
- {
- AndSetA(elem, ELEM_OF_MAT, P);
- flag = 0;
- no1 = 0;
- if (!InterSetA(Q, ELEM_OF_MAT))
- continue;
- for (cluster = _mainsys->setAsize - 1; cluster >= 0; cluster--)
- {
- for (bit = 0; bit < _cluster_bits; bit++)
- if (_mask[bit] & elem[cluster])
- {
- no1++;
- if (no1 > 1)
- {
- flag = 1;
- break;
- }
- else
- pcluster = cluster;
- }
- if (flag)
- break;
- }
- if (no1 == 1)
- core[pcluster] |= elem[pcluster];
- }
- CloseSetA(elem);
- return 0;
-}
-
-int IsOrtho(setA red, setA over, int matrix_type)
-{
- setA and, redprim;
-
- and = InitEmptySetA();
- redprim = InitEmptySetA();
- for (start_of_tab(matrix_type); end_of_tab(); next_of_tab())
- {
- AndSetA(and, _table_element, red);
- if (CardSetA(and) == 1)
- OrSetA(redprim, redprim, and);
- }
- CloseSetA(and);
- DifSetA(over, red, redprim);
- CloseSetA(redprim);
- return IsEmptySetA(over);
-}
-
-int IsOrthoRel(setA red, setA over, setA P, setA Q, int matrix_type)
-{
- setA and, redprim;
-
- and = InitEmptySetA();
- redprim = InitEmptySetA();
- for (start_of_tab(matrix_type); end_of_tab(); next_of_tab())
- if (InterSetA(_table_element, Q))
- {
- AndSetA(and, _table_element, red);
- AndSetA(and, and, P);
- if (CardSetA(and) == 1)
- OrSetA(redprim, redprim, and);
- }
- CloseSetA(and);
- DifSetA(over, red, redprim);
- CloseSetA(redprim);
- return IsEmptySetA(over);
-}
-
-int IsCover(setA red, int matrix_type)
-{
- switch (matrix_type)
- {
- case MATA:
- return IsCoverA(red);
- case MATD:
- return IsCoverDX(red, matrix_type);
- case MATX:
- return IsCoverDX(red, matrix_type);
- default:
- ERROR(8)
- }
-}
-
-int IsCoverA(setA red)
-{
- int ob1, ob2;
- setA P = InitFullSetA();
-
- DifSetA(P, P, red);
- if (_mainsys->matA == NULL)
- ERROR(5);
- for (ob1 = _mainsys->objects_num - 1; ob1 > 0; ob1--)
- for (ob2 = ob1 - 1; ob2 >= 0; ob2--)
- if (CompareA(ob1, ob2, red))
- if (!CompareA(ob1, ob2, P))
- {
- CloseSetA(P);
- return 0;
- }
- CloseSetA(P);
- return 1;
-}
-
-int IsCoverDX(setA red, int matrix_type)
-{
- if (matrix_type == MATD)
- {
- if (_mainsys->matD == NULL)
- ERROR(6)
- START_OF_D;
- }
- else
- {
- if (_mainsys->matX == NULL)
- ERROR(7)
- START_OF_X;
- }
- for (; END_OF_MAT; NEXT_OF_MAT)
- if (!IsEmptySetA(ELEM_OF_MAT))
- if (!InterSetA(ELEM_OF_MAT, red))
- return 0;
- return 1;
-}
-
-int IsCoverRel(setA red, setA P, setA Q, int matrix_type)
-{
- switch (matrix_type)
- {
- case MATA:
- return IsCoverRelA(red, P, Q);
- case MATD:
- return IsCoverRelD(red, P, Q);
- default:
- ERROR(8)
- }
-}
-
-int IsCoverRelA(setA red, setA P, setA Q)
-{
- int ob1, ob2;
- setA Pprim;
-
- if (_mainsys->matA == NULL)
- ERROR(5);
- Pprim = InitEmptySetA();
- DifSetA(Pprim, P, red);
- for (ob1 = _mainsys->objects_num - 1; ob1 > 0; ob1--)
- for (ob2 = ob1 - 1; ob2 >= 0; ob2--)
- if (!CompareA(ob1, ob2, Q))
- if (CompareA(ob1, ob2, red))
- if (!CompareA(ob1, ob2, Pprim))
- {
- CloseSetA(Pprim);
- return 0;
- }
- CloseSetA(Pprim);
- return 1;
-}
-
-int IsCoverRelD(setA red, setA P, setA Q)
-{
- if (_mainsys->matD == NULL)
- ERROR(6);
- for (START_OF_D; END_OF_MAT; NEXT_OF_MAT)
- if (InterSetA(ELEM_OF_MAT, Q))
- if (!InterSetA(ELEM_OF_MAT, red))
- if (InterSetA(ELEM_OF_MAT, P))
- return 0;
- return 1;
-}
-
-int IsRed(setA red, int matrix_type)
-{
- int result;
- setA over;
-
- if (!IsCover(red, matrix_type))
- return 0;
- over = InitEmptySetA();
- result = IsOrtho(red, over, matrix_type);
- CloseSetA(over);
- return result;
-}
-
-
-int IsRedRel(setA red, setA P, setA Q, int matrix_type)
-{
- int result;
- setA over;
-
- if (!IsCoverRel(red, P, Q, matrix_type))
- return 0;
- over = InitEmptySetA();
- result = IsOrthoRel(red, over, P, Q, matrix_type);
- CloseSetA(over);
- return result;
-}
Deleted: grass-addons/grass6/raster/mcda/r.roughset/rcore.h
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/rcore.h 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/rcore.h 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,80 +0,0 @@
-
-/****************************************************************************
- *
- * MODULE: r.roughset
- * AUTHOR(S): GRASS module authors ad Rough Set Library (RSL) maintain:
- * G.Massei (g_massa at libero.it)-A.Boggia (boggia at unipg.it)
- * Rough Set Library (RSL) ver. 2 original develop:
- * M.Gawrys - J.Sienkiewicz
- *
- * PURPOSE: Geographics rough set analisys and knowledge discovery
- *
- * COPYRIGHT: (C) GRASS Development Team (2008)
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************/
-
-/*** ***/
-
-/*** SOME MORE QUERIES FOR SYSTEM ***/
-
-/*** ( FINDING CORES AND CHECKING REDUCTS ) ***/
-
-/*** ***/
-
-/*** part of the RSL system written by M.Gawrys J.Sienkiewicz ***/
-
-/*** ***/
-
-/*****************************************************************************/
-
-
-
-int Core(setA core, int matrix_type);
-int CoreA(setA core);
-int CoreDX(setA core, int matrix_type);
-
- /* finds a core of all attributes */
-
-int CoreRel(setA core, setA P, setA Q, int matrix_type);
-int CoreRelA(setA core, setA P, setA Q);
-int CoreRelD(setA core, setA P, setA Q);
-
- /* finds a core of P relativly to Q */
-
-int IsOrtho(setA red, setA over, int matrix_type);
-
- /* return 1 if red is orthogonal */
- /* otherwise returns 0 */
-
-int IsOrthoRel(setA red, setA over, setA P, setA Q, int matrix_type);
-
- /* return 1 if red is Q-orthogonal in P */
- /* otherwise returns 0 */
-
-int IsCover(setA red, int matrix_type);
-int IsCoverA(setA red);
-int IsCoverDX(setA red, int matrix_type);
-
- /* return 1 if red is a cover */
- /* otherwise returns 0 */
-
-int IsCoverRel(setA red, setA P, setA Q, int matrix_type);
-int IsCoverRelA(setA red, setA P, setA Q);
-int IsCoverRelD(setA red, setA P, setA Q);
-
- /* return 1 if red is Q-cover in P */
- /* otherwise returns 0 */
-
-int IsRed(setA red, int matrix_type);
-
- /* returns 1 if red is a reduct */
- /* otherwise returns 0 */
-
-int IsRedRel(setA red, setA P, setA Q, int matrix_type);
-
- /* returns 1 if red is a Q-relative reduct of P */
- /* otherwise returns 0 */
Deleted: grass-addons/grass6/raster/mcda/r.roughset/reduct1.c
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/reduct1.c 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/reduct1.c 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,1305 +0,0 @@
-
-/****************************************************************************
- *
- * MODULE: r.roughset
- * AUTHOR(S): GRASS module authors ad Rough Set Library (RSL) maintain:
- * G.Massei (g_massa at libero.it)-A.Boggia (boggia at unipg.it)
- * Rough Set Library (RSL) ver. 2 original develop:
- * M.Gawrys - J.Sienkiewicz
- *
- * PURPOSE: Geographics rough set analisys and knowledge discovery
- *
- * COPYRIGHT: (C) A.Boggia - G.Massei (2008)
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************/
-/*** ***/
-/*** SOME MORE QUERIES FOR SYSTEM ***/
-/*** ( FINDING REDUCTS ) ***/
-/*** ***/
-/*** part of the RSL system written by M.Gawrys J.Sienkiewicz ***/
-/*** ***/
-/*****************************************************************************/
-
-
-#include "rough.h"
-#include <stdlib.h>
-
-
-int RedRel(setA * reducts, setA P, setA Q, int matrix_type)
-{
- int MEMOKWANT = _mainsys->attributes_num * _mainsys->attributes_num, j, atr, over, size = _mainsys->setAsize, memoryN = 1, memoryO = 1, /* size of the allocated memory */
- newcount = 0, oldcount; /* number of new/old reducts */
- int no_A = _mainsys->attributes_num;
- setA arg, /* arguments are elements of matrix */
- oldhead, /* head of static list of reducts */
- oldtail, /* tail ends the old reducts list */
- el, el1, /* elements of this list */
- new_el, /* probably new element of the list */
- newhead, /* begin of new reducts */
- newtail; /* tail of the list of new reducts */
- setA CORE, keep;
-
- CORE = InitEmptySetA();
- _rerror = 0;
- CoreRel(CORE, P, Q, matrix_type);
- if (_rerror != 0)
- {
- CloseSetA(CORE);
- return (-_rerror);
- }
- if ((oldhead = (setA) malloc(MEMOKWANT)) == NULL)
- {
- CloseSetA(CORE);
- ERROR(3);
- }
- if ((newhead = (setA) malloc(MEMOKWANT)) == NULL)
- {
- free(oldhead);
- CloseSetA(CORE);
- ERROR(3);
- }
- new_el = InitEmptySetA();
- arg = InitEmptySetA();
- oldtail = oldhead;
- newtail = newhead;
- start_of_tab(matrix_type); /* initializing the reducts list */
- if (!IsEmptySetA(CORE))
- {
- CopySetA(oldtail, CORE);
- oldtail += size, oldcount = 1;
- }
- else
- do
- {
- AndSetA(arg, _table_element, P);
- oldcount = 0;
- if (InterSetA(_table_element, Q))
- for (atr = 0; atr < no_A; atr++)
- if (ContSetA(arg, atr))
- {
- ClearSetA(oldtail);
- AddSetA(oldtail, atr);
- oldtail += size;
- oldcount++;
- }
- next_of_tab();
- }
- while ((oldcount == 0) && end_of_tab());
- for (; end_of_tab(); next_of_tab()) /* for each element of matD do */
- {
- AndSetA(arg, _table_element, P); /* take next element */
- over = 0;
- if (InterSetA(CORE, arg))
- continue;
- if (!InterSetA(_table_element, Q))
- continue;
- if (IsEmptySetA(arg))
- continue;
- el = oldhead;
- while (el < oldtail) /* compare arg to all the old reducts */
- {
- if (!InterSetA(el, arg))
- {
- for (atr = 0; atr < no_A; atr++) /* for each atribute of arg */
- if (ContSetA(arg, atr))
- {
- CopySetA(new_el, el); /* creating potentialy new reduct */
- AddSetA(new_el, atr);
- over = 0;
- el1 = oldhead;
- while ((el1 != el) && !over) /* comparing new reduct to old reducts */
- {
- over = InSetA(new_el, el1);
- el1 += size;
- }
- el1 = el + size;
- while ((el1 != oldtail) && !over)
- {
- over = InSetA(new_el, el1);
- el1 += size;
- }
- if (!over) /* appending new reduct */
- {
- newcount++;
- if (newcount * size * _cluster_bytes >
- memoryN * MEMOKWANT)
- {
- keep = newhead;
- if ((newhead =
- (setA) realloc(keep,
- MEMOKWANT *
- (++memoryN))) == NULL)
- {
- free(oldhead);
- CloseSetA(new_el);
- CloseSetA(arg);
- CloseSetA(CORE);
- ERROR(3);
- }
- if (keep != newhead)
- newtail = newhead + (newcount - 1) * size;
- }
- CopySetA(newtail, new_el);
- newtail += size;
- }
- }
- }
- else /* if reduct covers arg - rewrite it */
- {
- newcount++;
- if (newcount * size * _cluster_bytes > memoryN * MEMOKWANT)
- {
- keep = newhead;
- if ((newhead =
- (setA) realloc(keep,
- MEMOKWANT * (++memoryN))) == NULL)
- {
- free(oldhead);
- CloseSetA(new_el);
- CloseSetA(arg);
- CloseSetA(CORE);
- ERROR(3);
- }
- if (keep != newhead)
- newtail = newhead + (newcount - 1) * size;
- }
- CopySetA(newtail, el);
- newtail += size;
- }
- el += size;
- }
- oldtail = newhead; /* new reducts list becomes old */
- newhead = oldhead;
- oldhead = oldtail;
- oldtail = newtail;
- newtail = newhead;
- oldcount = newcount;
- newcount = 0;
- j = memoryO;
- memoryO = memoryN;
- memoryN = j;
- }
- if (oldcount == 0)
- {
- free(oldhead);
- *reducts = NULL;
- }
- else
- *reducts = oldhead;
- free(newhead);
- CloseSetA(CORE);
- CloseSetA(arg);
- CloseSetA(new_el);
- return (oldcount);
-}
-
-int Red(setA * reducts, int matrix_type)
-{
- int j, MEMOKWANT = _mainsys->attributes_num * _mainsys->attributes_num, atr, over, size = _mainsys->setAsize, memoryN = 1, memoryO = 1, /* size of the allocated memory */
- newcount = 0, oldcount; /* number of new/old reducts */
- int no_A = _mainsys->attributes_num;
- setA oldhead, /* head of static list of reducts */
- oldtail, /* tail ends the old reducts list */
- el, el1, /* elements of this list */
- new_el, /* probably new element of the list */
- newhead, /* begin of new reducts */
- newtail; /* tail of the list of new reducts */
- setA CORE, keep, and, redprim;
-
- CORE = InitEmptySetA();
- _rerror = 0;
- Core(CORE, matrix_type);
- if (_rerror != 0)
- {
- CloseSetA(CORE);
- return (-_rerror);
- }
- if ((oldhead = (setA) malloc(MEMOKWANT)) == NULL)
- {
- CloseSetA(CORE);
- keep = NULL;
- ERROR(3);
- }
- if ((newhead = (setA) malloc(MEMOKWANT)) == NULL)
- {
- free(oldhead);
- CloseSetA(CORE);
- ERROR(3);
- }
- new_el = InitEmptySetA();
- and = InitEmptySetA();
- redprim = InitEmptySetA();
- oldtail = oldhead;
- newtail = newhead;
- start_of_tab(matrix_type);
- if (!IsEmptySetA(CORE)) /* initializing of the reducts list */
- {
- CopySetA(oldtail, CORE);
- oldtail += size, oldcount = 1;
- }
- else
- do
- {
- oldcount = 0;
- for (atr = 0; atr < no_A; atr++)
- if (ContSetA(_table_element, atr))
- {
- ClearSetA(oldtail);
- AddSetA(oldtail, atr);
- oldtail += size;
- oldcount++;
- }
- next_of_tab();
- }
- while ((oldcount == 0) && end_of_tab());
- for (; end_of_tab(); next_of_tab()) /* for each element of matrix */
- {
- over = 0;
- if (InterSetA(CORE, _table_element))
- continue;
- if (IsEmptySetA(_table_element))
- continue;
- el = oldhead;
- while (el < oldtail) /* compare _table_element to all the old reducts */
- {
- if (!InterSetA(el, _table_element)) /* old reduct does not cover new element */
- {
- for (atr = 0; atr < no_A; atr++) /* for each atribute of _table_element */
- if (ContSetA(_table_element, atr))
- {
- CopySetA(new_el, el); /* creating potentialy new reduct */
- AddSetA(new_el, atr);
- over = 0;
- el1 = oldhead;
- /* if ( matrix_type==MATX && (_mainsys->matXsize<(oldtail-oldhead)))
- { ClearSetA( redprim );
- for(el1=_mainsys->matX;el1<_table_end;el1+=size)
- { AndSetA( and, el1, new_el );
- if ( CardSetA( and ) == 1 ) OrSetA( redprim, redprim, and );
- }
- over = !CompSetA( redprim, new_el );
- }
- else
- */
- {
- while ((el1 != el) && !over) /* comparing new reduct to all the old reducts */
- {
- over = InSetA(new_el, el1);
- el1 += size;
- }
- el1 = el + size;
- while ((el1 != oldtail) && !over)
- {
- over = InSetA(new_el, el1);
- el1 += size;
- }
- }
- if (!over) /* appending new reduct */
- {
- newcount++;
- if (newcount * size * _cluster_bytes >
- memoryN * MEMOKWANT)
- {
- keep = newhead;
- if ((newhead =
- (setA) realloc(keep,
- MEMOKWANT *
- (++memoryN))) == NULL)
- {
- free(oldhead);
- CloseSetA(new_el);
- CloseSetA(CORE);
- ERROR(3);
- }
- if (keep != newhead)
- newtail = newhead + (newcount - 1) * size;
- }
- CopySetA(newtail, new_el);
- newtail += size;
- }
- }
- }
- else /* old reduct covers new element */
- {
- newcount++;
- if (newcount * size * _cluster_bytes > memoryN * MEMOKWANT)
- {
- keep = newhead;
- if ((newhead =
- (setA) realloc(keep,
- MEMOKWANT * (++memoryN))) == NULL)
- {
- free(oldhead);
- CloseSetA(new_el);
- CloseSetA(CORE);
- ERROR(3);
- }
- if (keep != newhead)
- newtail = newhead + (newcount - 1) * size;
- }
- CopySetA(newtail, el);
- newtail += size;
- }
- el += size;
- }
- oldtail = newhead; /* new reducts list becomes old */
- newhead = oldhead;
- oldhead = oldtail;
- oldtail = newtail;
- newtail = newhead;
- oldcount = newcount;
- newcount = 0;
- j = memoryO;
- memoryO = memoryN;
- memoryN = j;
- }
- if (oldcount == 0)
- {
- free(oldhead);
- *reducts = NULL;
- }
- else
- *reducts = oldhead;
- free(newhead);
- CloseSetA(CORE);
- CloseSetA(new_el);
- CloseSetA(redprim);
- CloseSetA(and);
- return (oldcount);
-}
-
-
-int RedRelLess(setA * reducts, setA P, setA Q, int N, int matrix_type)
-{
- int j, MEMOKWANT = _mainsys->attributes_num * _mainsys->attributes_num, atr, over, size = _mainsys->setAsize, memoryN = 1, memoryO = 1, /* size of the allocated memory */
- newcount = 0, oldcount; /* number of new/old reducts */
- int no_A = _mainsys->attributes_num;
- setA arg, /* arguments are elements of matrix */
- oldhead, /* head of static list of reducts */
- oldtail, /* tail ends the old reducts list */
- el, el1, /* elements of this list */
- new_el, /* probably new element of the list */
- newhead, /* begin of new reducts */
- newtail; /* tail of the list of new reducts */
- setA CORE, keep;
-
- CORE = InitEmptySetA();
- _rerror = 0;
- CoreRel(CORE, P, Q, matrix_type);
- if (_rerror != 0)
- {
- CloseSetA(CORE);
- return (-_rerror);
- }
- if (CardSetA(CORE) > N)
- {
- free(CORE);
- return (0);
- }
- if ((oldhead = (setA) malloc(MEMOKWANT)) == NULL)
- {
- CloseSetA(CORE);
- ERROR(3);
- }
- if ((newhead = (setA) malloc(MEMOKWANT)) == NULL)
- {
- free(oldhead);
- CloseSetA(CORE);
- ERROR(3);
- }
- new_el = InitEmptySetA();
- arg = InitEmptySetA();
- oldtail = oldhead;
- newtail = newhead;
- start_of_tab(matrix_type);
- if (!IsEmptySetA(CORE))
- {
- CopySetA(oldtail, CORE);
- oldtail += size, oldcount = 1;
- }
- else
- do
- {
- AndSetA(arg, _table_element, P);
- oldcount = 0;
- if (InterSetA(_table_element, Q))
- for (atr = 0; atr < no_A; atr++)
- if (ContSetA(arg, atr))
- {
- ClearSetA(oldtail);
- AddSetA(oldtail, atr);
- oldtail += size;
- oldcount++;
- }
- next_of_tab();
- }
- while ((oldcount == 0) && end_of_tab());
- for (; end_of_tab(); next_of_tab()) /* for each element of matrix do */
- {
- AndSetA(arg, _table_element, P); /* take next element */
- over = 0;
- if (InterSetA(CORE, arg))
- continue;
- if (!InterSetA(_table_element, Q))
- continue;
- if (IsEmptySetA(arg))
- continue;
- el = oldhead;
- while (el < oldtail) /* compare arg to all old reducts */
- {
- if (!InterSetA(el, arg)) /* old reduct does not cover new element */
- {
- if (CardSetA(el) < N) /* shorter elements should be corected */
- for (atr = 0; atr < no_A; atr++) /* for each atribute of arg */
- if (ContSetA(arg, atr))
- {
- CopySetA(new_el, el); /* creating potentialy new reduct */
- AddSetA(new_el, atr);
- over = 0;
- el1 = oldhead;
- while ((el1 != el) && !over) /* comparing new reduct to all the old list */
- {
- over = InSetA(new_el, el1);
- el1 += size;
- }
- el1 = el + size;
- while ((el1 != oldtail) && !over)
- {
- over = InSetA(new_el, el1);
- el1 += size;
- }
- if (!over) /* appending to new list */
- {
- newcount++;
- if (newcount * size * _cluster_bytes >
- memoryN * MEMOKWANT)
- {
- keep = newhead;
- if ((newhead =
- (setA) realloc(keep,
- MEMOKWANT *
- (++memoryN))) ==
- NULL)
- {
- free(oldhead);
- CloseSetA(new_el);
- CloseSetA(arg);
- CloseSetA(CORE);
- ERROR(3);
- }
- if (keep != newhead)
- newtail =
- newhead + (newcount - 1) * size;
- }
- CopySetA(newtail, new_el);
- newtail += size;
- }
- }
- }
- else /* old reduct covers new element */
- {
- newcount++;
- if (newcount * size * _cluster_bytes > memoryN * MEMOKWANT)
- {
- keep = newhead;
- if ((newhead =
- (setA) realloc(keep,
- MEMOKWANT * (++memoryN))) == NULL)
- {
- free(oldhead);
- CloseSetA(new_el);
- CloseSetA(arg);
- CloseSetA(CORE);
- ERROR(3);
- }
- if (keep != newhead)
- newtail = newhead + (newcount - 1) * size;
- }
- CopySetA(newtail, el);
- newtail += size;
- }
- el += size;
- }
- oldtail = newhead; /* new list becomes old */
- newhead = oldhead;
- oldhead = oldtail;
- oldtail = newtail;
- newtail = newhead;
- oldcount = newcount;
- newcount = 0;
- j = memoryO;
- memoryO = memoryN;
- memoryN = j;
- }
- if (oldcount == 0)
- {
- free(oldhead);
- *reducts = NULL;
- }
- else
- *reducts = oldhead;
- free(newhead);
- CloseSetA(CORE);
- CloseSetA(arg);
- CloseSetA(new_el);
- return (oldcount);
-}
-
-
-int RedLess(setA * reducts, int N, int matrix_type)
-{
- int j, MEMOKWANT = _mainsys->attributes_num * _mainsys->attributes_num, atr, over, size = _mainsys->setAsize, memoryN = 1, memoryO = 1, /* size of the allocated memory */
- newcount = 0, oldcount; /* number of new/old reducts */
- int no_A = _mainsys->attributes_num;
- setA oldhead, /* head of static list of reducts */
- oldtail, /* tail ends the old reducts list */
- el, el1, /* elements of this list */
- new_el, /* probably new element of the list */
- newhead, /* begin of new reducts */
- newtail; /* tail of the list of new reducts */
- setA CORE, keep;
-
- CORE = InitEmptySetA();
- _rerror = 0;
- Core(CORE, matrix_type);
- if (_rerror != 0)
- {
- CloseSetA(CORE);
- return (-_rerror);
- }
- if (CardSetA(CORE) > N)
- {
- free(CORE);
- return (0);
- }
- if ((oldhead = (setA) malloc(MEMOKWANT)) == NULL)
- {
- CloseSetA(CORE);
- ERROR(3);
- }
- if ((newhead = (setA) malloc(MEMOKWANT)) == NULL)
- {
- free(oldhead);
- CloseSetA(CORE);
- ERROR(3);
- }
- new_el = InitEmptySetA();
- oldtail = oldhead;
- newtail = newhead;
- start_of_tab(matrix_type);
- if (!IsEmptySetA(CORE)) /*initializing the reducts list */
- {
- CopySetA(oldtail, CORE);
- oldtail += size;
- oldcount = 1;
- }
- else
- do
- {
- oldcount = 0;
- for (atr = 0; atr < no_A; atr++)
- if (ContSetA(_table_element, atr))
- {
- ClearSetA(oldtail);
- AddSetA(oldtail, atr);
- oldtail += size;
- oldcount++;
- }
- next_of_tab();
- }
- while ((oldcount == 0) && end_of_tab());
- for (; end_of_tab(); next_of_tab()) /* for each element of matD do */
- {
- over = 0;
- if (InterSetA(_table_element, CORE))
- continue;
- if (IsEmptySetA(_table_element))
- continue;
- el = oldhead;
- while (el < oldtail) /* compare _table_element to all the old reducts */
- {
- if (!InterSetA(el, _table_element)) /* old reduct does not cover new element */
- {
- if (CardSetA(el) < N)
- for (atr = 0; atr < no_A; atr++) /* for each atribute of element */
- if (ContSetA(_table_element, atr))
- {
- CopySetA(new_el, el); /* creating potentialy new reduct */
- AddSetA(new_el, atr);
- over = 0;
- el1 = oldhead; /* comparing new reduct to the old reducts */
- while ((el1 != el) && !over)
- {
- over = InSetA(new_el, el1);
- el1 += size;
- }
- el1 = el + size;
- while ((el1 != oldtail) && !over)
- {
- over = InSetA(new_el, el1);
- el1 += size;
- }
- if (!over) /* appending new reduct to list */
- {
- newcount++;
- if (newcount * size * _cluster_bytes >
- memoryN * MEMOKWANT)
- {
- keep = newhead;
- if ((newhead =
- (setA) realloc(keep,
- MEMOKWANT *
- (++memoryN))) ==
- NULL)
- {
- free(oldhead);
- CloseSetA(new_el);
- CloseSetA(CORE);
- ERROR(3);
- }
- if (keep != newhead)
- newtail =
- newhead + (newcount - 1) * size;
- }
- CopySetA(newtail, new_el);
- newtail += size;
- }
- }
- }
- else /* old reduct covers new element */
- {
- newcount++;
- if (newcount * size * _cluster_bytes > memoryN * MEMOKWANT)
- {
- keep = newhead;
- if ((newhead =
- (setA) realloc(keep,
- MEMOKWANT * (++memoryN))) == NULL)
- {
- free(oldhead);
- CloseSetA(new_el);
- CloseSetA(CORE);
- ERROR(3);
- }
- if (keep != newhead)
- newtail = newhead + (newcount - 1) * size;
- }
- CopySetA(newtail, el);
- newtail += size;
- }
- el += size;
- }
- oldtail = newhead; /* new list becomes old */
- newhead = oldhead;
- oldhead = oldtail;
- oldtail = newtail;
- newtail = newhead;
- oldcount = newcount;
- newcount = 0;
- j = memoryO;
- memoryO = memoryN;
- memoryN = j;
- }
- if (oldcount == 0)
- {
- free(oldhead);
- *reducts = NULL;
- }
- else
- *reducts = oldhead;
- free(newhead);
- CloseSetA(CORE);
- CloseSetA(new_el);
- return (oldcount);
-}
-
-
-int RedRelSetA(setA * reducts, setA quasicore, setA P, setA Q,
- int matrix_type)
-{
- int j, MEMOKWANT = _mainsys->attributes_num * _mainsys->attributes_num, atr, over, size = _mainsys->setAsize, memoryN = 1, memoryO = 1, /* size of the allocated memory */
- newcount = 0, oldcount; /* number of new/old reducts */
- int no_A = _mainsys->attributes_num;
- setA arg, /* arguments are elements of matrix */
- oldhead, /* head of static list of reducts */
- oldtail, /* tail ends the old reducts list */
- el, el1, /* elements of this list */
- new_el, /* probably new element of the list */
- newhead, /* begin of new reducts */
- newtail; /* tail of the list of new reducts */
- setA CORE, keep;
-
- CORE = InitEmptySetA();
- _rerror = 0;
- CoreRel(CORE, P, Q, matrix_type);
- if (_rerror != 0)
- {
- CloseSetA(CORE);
- return (-_rerror);
- }
- OrSetA(CORE, CORE, quasicore);
- if ((oldhead = (setA) malloc(MEMOKWANT)) == NULL)
- {
- CloseSetA(CORE);
- ERROR(3);
- }
- if ((newhead = (setA) malloc(MEMOKWANT)) == NULL)
- {
- free(oldhead);
- CloseSetA(CORE);
- ERROR(3);
- }
- new_el = InitEmptySetA();
- arg = InitEmptySetA();
- oldtail = oldhead;
- newtail = newhead;
- start_of_tab(matrix_type);
- if (!IsEmptySetA(CORE)) /*initializing the reducts list */
- {
- CopySetA(oldtail, CORE);
- oldtail += size;
- oldcount = 1;
- }
- else
- do
- {
- AndSetA(arg, _table_element, P);
- oldcount = 0;
- if (InterSetA(_table_element, Q))
- for (atr = 0; atr < no_A; atr++)
- if (ContSetA(arg, atr))
- {
- ClearSetA(oldtail);
- AddSetA(oldtail, atr);
- oldtail += size;
- oldcount++;
- }
- next_of_tab();
- }
- while ((oldcount == 0) && end_of_tab());
- for (; end_of_tab(); next_of_tab()) /* for each element of matrix do */
- {
- AndSetA(arg, _table_element, P); /* take next element */
- over = 0;
- if (InterSetA(CORE, arg))
- continue;
- if (!InterSetA(_table_element, Q))
- continue;
- if (IsEmptySetA(arg))
- continue;
- el = oldhead;
- while (el < oldtail) /* compare element to all the old reducts */
- {
- if (!InterSetA(el, arg)) /* old reduct does not cover new element */
- {
- for (atr = 0; atr < no_A; atr++) /* for each atribute of element */
- if (ContSetA(arg, atr))
- {
- CopySetA(new_el, el); /* creating potentialy new reduct */
- AddSetA(new_el, atr);
- over = 0;
- el1 = oldhead;
- while ((el1 != el) && !over) /* comparing new reduct to all the old reducts */
- {
- over = InSetA(new_el, el1);
- el1 += size;
- }
- el1 = el + size;
- while ((el1 != oldtail) && !over)
- {
- over = InSetA(new_el, el1);
- el1 += size;
- }
- if (!over) /* appending new reduct to list */
- {
- newcount++;
- if (newcount * size * _cluster_bytes >
- memoryN * MEMOKWANT)
- {
- keep = newhead;
- if ((newhead =
- (setA) realloc(keep,
- MEMOKWANT *
- (++memoryN))) == NULL)
- {
- free(oldhead);
- CloseSetA(new_el);
- CloseSetA(arg);
- CloseSetA(CORE);
- ERROR(3);
- }
- if (keep != newhead)
- newtail = newhead + (newcount - 1) * size;
- }
- CopySetA(newtail, new_el);
- newtail += size;
- }
- }
- }
- else /* old reduct covers new elemet */
- {
- newcount++;
- if (newcount * size * _cluster_bytes > memoryN * MEMOKWANT)
- {
- keep = newhead;
- if ((newhead =
- (setA) realloc(keep,
- MEMOKWANT * (++memoryN))) == NULL)
- {
- free(oldhead);
- CloseSetA(new_el);
- CloseSetA(arg);
- CloseSetA(CORE);
- ERROR(3);
- }
- if (keep != newhead)
- newtail = newhead + (newcount - 1) * size;
- }
- CopySetA(newtail, el);
- newtail += size;
- }
- el += size;
- }
- oldtail = newhead; /* new list becomes old */
- newhead = oldhead;
- oldhead = oldtail;
- oldtail = newtail;
- newtail = newhead;
- oldcount = newcount;
- newcount = 0;
- j = memoryO;
- memoryO = memoryN;
- memoryN = j;
- }
- if (oldcount == 0)
- {
- free(oldhead);
- *reducts = NULL;
- }
- else
- *reducts = oldhead;
- free(newhead);
- CloseSetA(CORE);
- CloseSetA(arg);
- CloseSetA(new_el);
- return (oldcount);
-}
-
-int RedSetA(setA * reducts, setA quasicore, int matrix_type)
-{
- int j, MEMOKWANT = _mainsys->attributes_num * _mainsys->attributes_num, atr, over, size = _mainsys->setAsize, memoryN = 1, memoryO = 1, /* size of the allocated memory */
- newcount = 0, oldcount; /* number of new/old reducts */
- int no_A = _mainsys->attributes_num;
- setA oldhead, /* head of static list of reducts */
- oldtail, /* tail ends the old reducts list */
- el, el1, /* elements of this list */
- new_el, /* probably new element of the list */
- newhead, /* begin of new reducts */
- newtail; /* tail of the list of new reducts */
- setA CORE, keep;
-
- CORE = InitEmptySetA();
- _rerror = 0;
- Core(CORE, matrix_type);
- if (_rerror != 0)
- {
- CloseSetA(CORE);
- return (-_rerror);
- }
- OrSetA(CORE, CORE, quasicore);
- if ((oldhead = (setA) malloc(MEMOKWANT)) == NULL)
- {
- CloseSetA(CORE);
- ERROR(3);
- }
- if ((newhead = (setA) malloc(MEMOKWANT)) == NULL)
- {
- free(oldhead);
- CloseSetA(CORE);
- ERROR(3);
- }
- new_el = InitEmptySetA();
- oldtail = oldhead;
- newtail = newhead;
- start_of_tab(matrix_type);
- if (!IsEmptySetA(CORE)) /*initializing the reducts list */
- {
- CopySetA(oldtail, CORE);
- oldtail += size, oldcount = 1;
- }
- else
- do
- {
- oldcount = 0;
- for (atr = 0; atr < no_A; atr++)
- if (ContSetA(_table_element, atr))
- {
- ClearSetA(oldtail);
- AddSetA(oldtail, atr);
- oldtail += size;
- oldcount++;
- }
- next_of_tab();
- }
- while ((oldcount == 0) && end_of_tab());
- for (; end_of_tab(); next_of_tab()) /* for each element of matrix do */
- {
- over = 0;
- if (InterSetA(_table_element, CORE))
- continue;
- if (IsEmptySetA(_table_element))
- continue;
- el = oldhead;
- while (el < oldtail) /* compare elment to all the old reducts */
- {
- if (!InterSetA(el, _table_element)) /* old reduct does not cover element */
- {
- for (atr = 0; atr < no_A; atr++) /* for each atribute of element */
- if (ContSetA(_table_element, atr))
- {
- CopySetA(new_el, el); /* creating potentialy new reduct */
- AddSetA(new_el, atr);
- over = 0;
- el1 = oldhead;
- while ((el1 != el) && !over) /* comparing new reduct to all the old reducts */
- {
- over = InSetA(new_el, el1);
- el1 += size;
- }
- el1 = el + size;
- while ((el1 != oldtail) && !over)
- {
- over = InSetA(new_el, el1);
- el1 += size;
- }
- if (!over) /* appending new reduct to list */
- {
- newcount++;
- if (newcount * size * _cluster_bytes >
- memoryN * MEMOKWANT)
- {
- keep = newhead;
- if ((newhead =
- (setA) realloc(keep,
- MEMOKWANT *
- (++memoryN))) == NULL)
- {
- free(oldhead);
- CloseSetA(new_el);
- CloseSetA(CORE);
- ERROR(3);
- }
- if (keep != newhead)
- newtail = newhead + (newcount - 1) * size;
- }
- CopySetA(newtail, new_el);
- newtail += size;
- }
- }
- }
- else /* old reduct covers new element */
- {
- newcount++;
- if (newcount * size * _cluster_bytes > memoryN * MEMOKWANT)
- {
- keep = newhead;
- if ((newhead =
- (setA) realloc(keep,
- MEMOKWANT * (++memoryN))) == NULL)
- {
- free(oldhead);
- CloseSetA(new_el);
- CloseSetA(CORE);
- ERROR(3);
- }
- if (keep != newhead)
- newtail = newhead + (newcount - 1) * size;
- }
- CopySetA(newtail, el);
- newtail += size;
- }
- el += size;
- }
- oldtail = newhead; /* new list becomes old */
- newhead = oldhead;
- oldhead = oldtail;
- oldtail = newtail;
- newtail = newhead;
- oldcount = newcount;
- newcount = 0;
- j = memoryO;
- memoryO = memoryN;
- memoryN = j;
- }
- if (oldcount == 0)
- {
- free(oldhead);
- *reducts = NULL;
- }
- else
- *reducts = oldhead;
- free(newhead);
- CloseSetA(CORE);
- CloseSetA(new_el);
- return (oldcount);
-}
-
-int RedRelFirst(setA * reducts, setA P, setA Q, int N, int matrix_type)
-{
- int atr, over, size = _mainsys->setAsize, newcount = 0, oldcount; /* number of new,old reducts */
- int no_A = _mainsys->attributes_num;
- setA arg, /* arguments are elements of matrix */
- oldhead, /* head of static list of reducts */
- oldtail, /* tail ends the old reducts list */
- el, el1, /* elements of this list */
- new_el, /* probably new element of the list */
- newhead, /* begin of new reducts */
- newtail; /* tail of the list of new reducts */
- setA CORE;
-
- if (N == 0)
- return 0;
- CORE = InitEmptySetA();
- _rerror = 0;
- CoreRel(CORE, P, Q, matrix_type);
- if (_rerror != 0)
- {
- CloseSetA(CORE);
- return (-_rerror);
- }
- if ((oldhead = (setA) malloc(N * size * _cluster_bytes)) == NULL)
- {
- CloseSetA(CORE);
- ERROR(3);
- }
- if ((newhead = (setA) malloc(N * size * _cluster_bytes)) == NULL)
- {
- free(oldhead);
- CloseSetA(CORE);
- ERROR(3);
- }
- new_el = InitEmptySetA();
- arg = InitEmptySetA();
- oldtail = oldhead;
- newtail = newhead;
- start_of_tab(matrix_type);
- if (!IsEmptySetA(CORE)) /* initializing the reducts list */
- {
- CopySetA(oldtail, CORE);
- oldtail += size, oldcount = 1;
- }
- else
- do
- {
- AndSetA(arg, _table_element, P);
- oldcount = 0;
- if (InterSetA(_table_element, Q))
- for (atr = 0; atr < no_A; atr++)
- if (ContSetA(arg, atr) && (oldcount < N))
- {
- ClearSetA(oldtail);
- AddSetA(oldtail, atr);
- oldtail += size;
- oldcount++;
- }
- next_of_tab();
- }
- while ((oldcount == 0) && end_of_tab());
- for (; end_of_tab(); next_of_tab()) /* for each element of matrix do */
- {
- AndSetA(arg, _table_element, P); /* take next element */
- over = 0;
- if (InterSetA(CORE, arg))
- continue;
- if (!InterSetA(_table_element, Q))
- continue;
- if (IsEmptySetA(arg))
- continue;
- el = oldhead;
- while (el < oldtail) /* compare element to all the old reducts */
- {
- if (!InterSetA(el, arg)) /* old reduct does not cover element */
- {
- for (atr = 0; atr < no_A; atr++) /* for each atribute of elememt */
- if (ContSetA(arg, atr) && (newcount < N))
- {
- CopySetA(new_el, el); /* creating potentialy new reduct */
- AddSetA(new_el, atr);
- over = 0;
- el1 = oldhead;
- while ((el1 != el) && !over) /* comparing new reduct to all the old reducts */
- {
- over = InSetA(new_el, el1);
- el1 += size;
- }
- el1 = el + size;
- while ((el1 != oldtail) && !over)
- {
- over = InSetA(new_el, el1);
- el1 += size;
- }
- if (!over) /* appending new reduct to list */
- {
- CopySetA(newtail, new_el);
- newtail += size;
- newcount++;
- }
- }
- }
- else if (newcount < N)
- {
- CopySetA(newtail, el);
- newtail += size;
- newcount++;
- }
- el += size;
- }
- oldtail = newhead; /* new list becomes old */
- newhead = oldhead;
- oldhead = oldtail;
- oldtail = newtail;
- newtail = newhead;
- oldcount = newcount;
- newcount = 0;
- }
- if (oldcount == 0)
- {
- free(oldhead);
- *reducts = NULL;
- }
- else
- *reducts = oldhead;
- free(newhead);
- CloseSetA(CORE);
- CloseSetA(arg);
- CloseSetA(new_el);
- return (oldcount);
-}
-
-int RedFirst(setA * reducts, int N, int matrix_type)
-{
- int atr, over, size = _mainsys->setAsize, newcount = 0, oldcount; /* sizes of reduct lists */
- int no_A = _mainsys->attributes_num;
- setA oldhead, /* head of static list of reducts */
- oldtail, /* tail ends the old reducts list */
- el, el1, /* elements of this list */
- new_el, /* probably new element of the list */
- newhead, /* begin of new reducts */
- newtail; /* tail of the list of new reducts */
- setA CORE;
-
- if (N == 0)
- return 0;
- CORE = InitEmptySetA();
- _rerror = 0;
- Core(CORE, matrix_type);
- if (_rerror != 0)
- {
- CloseSetA(CORE);
- return (-_rerror);
- }
- if ((oldhead = (setA) malloc(N * size * _cluster_bytes)) == NULL)
- {
- CloseSetA(CORE);
- ERROR(3);
- }
- if ((newhead = (setA) malloc(N * size * _cluster_bytes)) == NULL)
- {
- free(oldhead);
- CloseSetA(CORE);
- ERROR(3);
- }
- new_el = InitEmptySetA();
- oldtail = oldhead;
- newtail = newhead;
- start_of_tab(matrix_type);
- if (!IsEmptySetA(CORE)) /*initializing the reducts list */
- {
- CopySetA(oldtail, CORE);
- oldtail += size, oldcount = 1;
- }
- else
- do
- {
- oldcount = 0;
- for (atr = 0; atr < no_A; atr++)
- if (ContSetA(_table_element, atr) && (oldcount < N))
- {
- ClearSetA(oldtail);
- AddSetA(oldtail, atr);
- oldtail += size;
- oldcount++;
- }
- next_of_tab();
- }
- while ((oldcount == 0) && end_of_tab());
- for (; end_of_tab(); next_of_tab()) /* for each element of matrix do */
- {
- over = 0;
- if (InterSetA(_table_element, CORE))
- continue;
- if (IsEmptySetA(_table_element))
- continue;
- el = oldhead;
- while (el < oldtail) /* compare element to all the old reducts */
- {
- if (!InterSetA(el, _table_element)) /* old reduct does not cover element */
- {
- for (atr = 0; atr < no_A; atr++) /* for each atribute of element */
- if (ContSetA(_table_element, atr) && (newcount < N))
- {
- CopySetA(new_el, el); /* creating potentialy new element */
- AddSetA(new_el, atr);
- over = 0;
- el1 = oldhead;
- while ((el1 != el) && !over) /* comparing new reduct to old list */
- {
- over = InSetA(new_el, el1);
- el1 += size;
- }
- el1 = el + size;
- while ((el1 != oldtail) && !over)
- {
- over = InSetA(new_el, el1);
- el1 += size;
- }
- if (!over)
- {
- CopySetA(newtail, new_el);
- newtail += size;
- newcount++;
- }
- }
- }
- else if (newcount < N)
- {
- CopySetA(newtail, el); /* rewriting reduct from old list */
- newtail += size;
- newcount++;
- }
- el += size;
- }
- oldtail = newhead; /* new list becomes old */
- newhead = oldhead;
- oldhead = oldtail;
- oldtail = newtail;
- newtail = newhead;
- oldcount = newcount;
- newcount = 0;
- }
- if (oldcount == 0)
- {
- free(oldhead);
- *reducts = NULL;
- }
- else
- *reducts = oldhead;
- free(newhead);
- CloseSetA(CORE);
- CloseSetA(new_el);
- return (oldcount);
-}
Deleted: grass-addons/grass6/raster/mcda/r.roughset/reduct1.h
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/reduct1.h 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/reduct1.h 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,78 +0,0 @@
-
-/****************************************************************************
- *
- * MODULE: r.roughset
- * AUTHOR(S): GRASS module authors ad Rough Set Library (RSL) maintain:
- * G.Massei (g_massa at libero.it)-A.Boggia (boggia at unipg.it)
- * Rough Set Library (RSL) ver. 2 original develop:
- * M.Gawrys - J.Sienkiewicz
- *
- * PURPOSE: Geographics rough set analisys and knowledge discovery
- *
- * COPYRIGHT: (C) GRASS Development Team (2008)
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************/
-
-/*** ***/
-
-/*** SOME MORE QUERIES FOR SYSTEM ***/
-
-/*** ( FINDING REDUCTS ) ***/
-
-/*** ***/
-
-/*** part of the RSL system written by M.Gawrys J.Sienkiewicz ***/
-
-/*** ***/
-
-/*****************************************************************************/
-
-
-
-int Red(setA * red, int matrix);
-
- /* finds all reducts for information system, */
- /* sets red to yhe allocated reducts table */
- /* function returns number of reducts */
-
-
-int RedRel(setA * red, setA P, setA Q, int matrix_type);
-
- /* like Red, but reducts are Q-relative and */
- /* computed from set of attributes P */
-
-int RedLess(setA * red, int N, int matrix_type);
-
- /* finds all reducts which contain less than */
- /* N attributes, other parameters and result */
- /* like Red */
-
-int RedRelLess(setA * red, setA P, setA Q, int N, int matrix_type);
-
- /* like RedLess, but reducts are Q-relative of P */
-
-
-int RedSetA(setA * red, setA quasicore, int matrix_type);
-
- /* finds only reducts including quasicore , */
- /* some reducts can be not minimal ( formally */
- /* they are not reducts ) , other parameters and */
- /* result like Red */
-
-int RedRelSetA(setA * red, setA quasicore, setA P, setA Q, int matrix_type);
-
- /* like RedSetA, but reducts are Q-relative of P */
-
-
-int RedFirst(setA * red, int N, int matrix_type);
-
- /* finds first N reducts ( only quasi-reduct ), */
- /* other parameters and result like Red */
-
-int RedRelFirst(setA * red, setA P, setA Q, int N, int matrix_type);
-
- /* like RedFirst, but reducts are Q-relative of P */
Deleted: grass-addons/grass6/raster/mcda/r.roughset/reduct2.c
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/reduct2.c 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/reduct2.c 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,236 +0,0 @@
-
-/****************************************************************************
- *
- * MODULE: r.roughset
- * AUTHOR(S): GRASS module authors ad Rough Set Library (RSL) maintain:
- * G.Massei (g_massa at libero.it)-A.Boggia (boggia at unipg.it)
- * Rough Set Library (RSL) ver. 2 original develop:
- * M.Gawrys - J.Sienkiewicz
- *
- * PURPOSE: Geographics rough set analisys and knowledge discovery
- *
- * COPYRIGHT: (C) A.Boggia - G.Massei (2008)
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************/
-/*** ***/
-/*** SOME MORE QUERIES FOR SYSTEM ***/
-/*** ( AUXILIARY REDUCTS ROUTINES ) ***/
-/*** ***/
-/*** part of the RSL system written by M.Gawrys J.Sienkiewicz ***/
-/*** ***/
-/*****************************************************************************/
-
-
-#include <stdlib.h>
-#include "rough.h"
-
-int RedSingle(setA red, int matrix_type)
-{
- int i;
- int cont = 1;
- setA over;
-
- over = InitEmptySetA();
- Core(red, matrix_type);
- for (i = 0; (i < _mainsys->attributes_num) && cont; i++)
- if (IsCover(red, matrix_type))
- cont = 0;
- else
- AddSetA(red, i);
- cont = 1;
- while (cont)
- if (IsOrtho(red, over, matrix_type))
- cont = 0;
- else
- for (i = 0; i < _mainsys->attributes_num; i++)
- if (ContSetA(over, i))
- {
- DelSetA(red, i);
- break;
- }
- CloseSetA(over);
- return 1;
-}
-
-int RedRelSingle(setA red, setA P, setA Q, int matrix_type)
-{
- int i;
- int cont = 1;
- setA over;
-
- over = InitEmptySetA();
- CoreRel(red, P, Q, matrix_type);
- for (i = 0; (i < _mainsys->attributes_num) && cont; i++)
- {
- if (IsCoverRel(red, P, Q, matrix_type))
- cont = 0;
- else
- AddSetA(red, i);
- }
- cont = 1;
- while (cont)
- {
- if (IsOrthoRel(red, over, P, Q, matrix_type))
- cont = 0;
- else
- for (i = 0; i < _mainsys->attributes_num; i++)
- if (ContSetA(over, i))
- {
- DelSetA(red, i);
- break;
- }
- }
- CloseSetA(over);
- return 1;
-}
-
-
-
-int RedOptim(setA red, int matrix_type)
-{
- int max, f, fmax;
- int i, atr;
- int cont = 1;
- setA over;
-
- over = InitFullSetA();
- Core(red, matrix_type);
- fmax = CardCoef(over, matrix_type);
- max = CardCoef(red, matrix_type);
- while (max < fmax)
- {
- for (i = 0; i < _mainsys->attributes_num; i++)
- if (!ContSetA(red, i))
- {
- AddSetA(red, i);
- f = CardCoef(red, matrix_type);
- if (f >= max)
- max = f, atr = i;
- DelSetA(red, i);
- }
- AddSetA(red, atr);
- }
- cont = 1;
- while (cont)
- {
- if (IsOrtho(red, over, matrix_type))
- cont = 0;
- else
- for (i = 0; i < _mainsys->attributes_num; i++)
- if (ContSetA(over, i))
- {
- DelSetA(red, i);
- break;
- }
- }
- CloseSetA(over);
- return 1;
-}
-
-int RedRelOptim(setA red, setA P, setA Q, int matrix_type)
-{
- float max, f, fmax;
- int i, atr;
- int cont = 1;
- setA over;
-
- over = InitEmptySetA();
- CoreRel(red, P, Q, matrix_type);
- fmax = DependCoef(P, Q, matrix_type);
- while (cont)
- {
- max = 0;
- for (i = 0; i < _mainsys->attributes_num; i++)
- if (ContSetA(P, i) && !ContSetA(red, i))
- {
- AddSetA(red, i);
- f = DependCoef(red, Q, matrix_type);
- if (f >= max)
- max = f, atr = i;
- DelSetA(red, i);
- }
- AddSetA(red, atr);
- if (max == fmax)
- cont = 0;
- }
- cont = 1;
- while (cont)
- {
- if (IsOrthoRel(red, over, P, Q, matrix_type))
- cont = 0;
- else
- for (i = 0; i < _mainsys->attributes_num; i++)
- if (ContSetA(over, i))
- {
- DelSetA(red, i);
- break;
- }
- }
- CloseSetA(over);
- return 1;
-}
-
-int RedFew(setA * reds, int matrix_type)
-{
- setA r;
- int n;
-
- r = InitEmptySetA();
- RedSingle(r, matrix_type);
- n = RedLess(reds, CardSetA(r), matrix_type);
- CloseSetA(r);
- return n;
-}
-
-int RedRelFew(setA * reds, setA P, setA Q, int matrix_type)
-{
- setA r;
- int n;
-
- r = InitEmptySetA();
- RedRelSingle(r, P, Q, matrix_type);
- n = RedRelLess(reds, P, Q, CardSetA(r), matrix_type);
- CloseSetA(r);
- return n;
-}
-
-int SelectOneShort(setA reds, int N)
-{
- int min, m, i, num = 0;
-
- min = _mainsys->attributes_num;
- for (i = 0, START_OF_MAT(reds, N); END_OF_MAT; i++, NEXT_OF_MAT)
- if (min > (m = CardSetA(ELEM_OF_MAT)))
- min = m, num = i;
- return num;
-}
-
-int SelectAllShort(setA * newreds, setA reds, int N)
-{
- int num, m, min;
- int size = _mainsys->setAsize;
-
- min = _mainsys->attributes_num + 1;
- *newreds = (cluster_type *) malloc(N * size * _cluster_bytes);
- for (START_OF_MAT(reds, N); END_OF_MAT; NEXT_OF_MAT)
- if (min > (m = CardSetA(ELEM_OF_MAT)))
- {
- min = m;
- num = 0;
- CopySetA(*newreds + num * size, ELEM_OF_MAT);
- }
- else if (min == m)
- {
- num++;
- CopySetA(*newreds + num * size, ELEM_OF_MAT);
- }
- *newreds =
- (cluster_type *) realloc(*newreds, (num + 1) * size * _cluster_bytes);
- if (*newreds == 0)
- num = -1;
- return num + 1;
-}
Deleted: grass-addons/grass6/raster/mcda/r.roughset/reduct2.h
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/reduct2.h 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/reduct2.h 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,74 +0,0 @@
-
-/****************************************************************************
- *
- * MODULE: r.roughset
- * AUTHOR(S): GRASS module authors ad Rough Set Library (RSL) maintain:
- * G.Massei (g_massa at libero.it)-A.Boggia (boggia at unipg.it)
- * Rough Set Library (RSL) ver. 2 original develop:
- * M.Gawrys - J.Sienkiewicz
- *
- * PURPOSE: Geographics rough set analisys and knowledge discovery
- *
- * COPYRIGHT: (C) GRASS Development Team (2008)
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************/
-
-/*** ***/
-
-/*** SOME MORE QUERIES FOR SYSTEM ***/
-
-/*** (AUXILIARY REDUCTS ROUTINES) ***/
-
-/*** ***/
-
-/*** part of the RSL system written by M.Gawrys J.Sienkiewicz ***/
-
-/*** ***/
-
-/*****************************************************************************/
-
-
-int RedSingle(setA red, int matrix_type);
-
- /* heuristicly searches for a single reduct and stores it in red */
-
-int RedRelSingle(setA red, setA P, setA Q, int matrix_type);
-
- /* heuristicly searches for a single Q-relative reduct of P */
- /* and stores it in red */
-
-int RedOptim(setA red, int matrix_type);
-
- /* heuristicly searches for a single reduct and stores it in red */
- /* dependency coefficient is used to select */
- /* attributes for search optimization */
-
-int RedRelOptim(setA red, setA P, setA Q, int matrix_type);
-
- /* heuristicly searches for a single Q-relative reduct of P */
- /* and stores it in red; dependency coefficient is used to select */
- /* attributes for search optimization */
-
-int RedFew(setA * reds, int matrix_type);
-
- /* finds all reducts shortesest or equal in size to the first */
- /* reduct found by the heuristic algorithm */
-
-int RedRelFew(setA * reds, setA P, setA Q, int matrix_type);
-
- /* finds all Q-relative P-reducts shortesest or equal in size */
- /* to the first reduct found by the heuristic algorithm */
-
-int SelectOneShort(setA reds, int num);
-
- /* returns index of the single shortest reduct */
- /* from the table of num reducts pointed by reds */
-
-int SelectAllShort(setA * newreds, setA reds, int num);
-
- /* copies all the shortest reducts */
- /* from the table of num reducts pointed by reds */
Deleted: grass-addons/grass6/raster/mcda/r.roughset/rerror.h
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/rerror.h 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/rerror.h 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,45 +0,0 @@
-
-/****************************************************************************
- *
- * MODULE: r.roughset
- * AUTHOR(S): GRASS module authors ad Rough Set Library (RSL) maintain:
- * G.Massei (g_massa at libero.it)-A.Boggia (boggia at unipg.it)
- * Rough Set Library (RSL) ver. 2 original develop:
- * M.Gawrys - J.Sienkiewicz
- *
- * PURPOSE: Geographics rough set analisys and knowledge discovery
- *
- * COPYRIGHT: (C) GRASS Development Team (2008)
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************/
-
-/*** ***/
-
-/*** OPTIONAL ERROR HANDLING AND ERROR MESSAGES ***/
-
-/*** ***/
-
-/*** part of the RSL system written by M.Gawrys J. Sienkiewicz ***/
-
-/*** ***/
-
-/*****************************************************************************/
-
-
-char *errcodes[10] = { "everything O.K.",
- "Cannot open file",
- "Wrong format of file",
- "Not enough memory",
- "Cannot write to file",
- "Matrix A not initialized",
- "Matrix D not initialized",
- "Matrix X not initialized",
- "Wrong matrix type",
- "Set element out of domain"
-};
-
-#define ErrorPrint() {printf("ERROR no: %i: %s\n",_rerror,errcodes[_rerror]);_rerror=0;}
Deleted: grass-addons/grass6/raster/mcda/r.roughset/rough.h
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/rough.h 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/rough.h 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,73 +0,0 @@
-
-/****************************************************************************
- *
- * MODULE: r.roughset
- * AUTHOR(S): GRASS module authors ad Rough Set Library (RSL) maintain:
- * G.Massei (g_massa at libero.it)-A.Boggia (boggia at unipg.it)
- * Rough Set Library (RSL) ver. 2 original develop:
- * M.Gawrys - J.Sienkiewicz
- *
- * PURPOSE: Geographics rough set analisys and knowledge discovery
- *
- * COPYRIGHT: (C) GRASS Development Team (2008)
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************/
-
-/*** ***/
-
-/*** OBLIGATORY FILE TO INCLUDE IN APPLICATION SOURCE ***/
-
-/*** (DATA TYPES, CONSTANTS AND HEADERS) ***/
-
-/*** ***/
-
-/*** part of the RSL system written by M.Gawrys J.Sienkiewicz ***/
-
-/*** ***/
-
-/*****************************************************************************/
-
-/********************* CONSTANTS AND TYPES ***********************************/
-
-#define MATA 0
-#define MATD 1
-#define MATX 2
-
-#define ERROR(a) { _rerror=a; return -a; }
-
-typedef unsigned int cluster_type;
-typedef unsigned int value_type;
-typedef cluster_type *setO;
-typedef cluster_type *setA;
-
-typedef struct
-{
- char name[50];
- int objects_num;
- int attributes_num;
- int descr_size;
- void *description;
- int setAsize;
- int setOsize;
- value_type *matA;
- cluster_type *matD;
- cluster_type *matX;
- unsigned int matXsize;
-} SYSTEM;
-
-/************** H-FILES CONTAINING DECLARATIONS OF FUNCTIONS *********/
-
-#include "rset.h"
-#include "rsystem.h"
-#include "raccess.h"
-#include "rbasic.h"
-#include "rcore.h"
-#include "reduct1.h"
-#include "reduct2.h"
-#include "rule1.h"
-#include "rule2.h"
-#include "rclass.h"
Deleted: grass-addons/grass6/raster/mcda/r.roughset/rset.c
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/rset.c 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/rset.c 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,500 +0,0 @@
-
-/****************************************************************************
- *
- * MODULE: r.roughset
- * AUTHOR(S): GRASS module authors ad Rough Set Library (RSL) maintain:
- * G.Massei (g_massa at libero.it)-A.Boggia (boggia at unipg.it)
- * Rough Set Library (RSL) ver. 2 original develop:
- * M.Gawrys - J.Sienkiewicz
- *
- * PURPOSE: Geographics rough set analisys and knowledge discovery
- *
- * COPYRIGHT: (C) A.Boggia - G.Massei (2008)
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************/
-/*** ***/
-/*** OPERATIONS ON SETS OF ATTRIBUTES AND OBJECTS ***/
-/*** ***/
-/*** part of the RSL system written by M.Gawrys J. Sienkiewicz ***/
-/*** ***/
-/*****************************************************************************/
-
-
-#include "rough.h"
-#include <stdlib.h>
-
-
-int _cluster_bytes = sizeof(cluster_type);
-int _cluster_bits = 8 * sizeof(cluster_type);
-cluster_type _mask[8 * sizeof(cluster_type)];
-
-setA InitEmptySetA(void)
-{
- int cluster;
- setA set;
-
- set = (setA) malloc(_mainsys->setAsize * _cluster_bytes);
- for (cluster = _mainsys->setAsize - 1; cluster >= 0; cluster--)
- set[cluster] = 0;
- return set;
-}
-
-setO InitEmptySetO(void)
-{
- int cluster;
- setO set;
-
- set = (setA) malloc(_mainsys->setOsize * _cluster_bytes);
- for (cluster = _mainsys->setOsize - 1; cluster >= 0; cluster--)
- set[cluster] = 0;
- return set;
-}
-
-setA InitFullSetA(void)
-{
- int attr, cluster;
- setA set;
-
- set = (setA) malloc(_mainsys->setAsize * _cluster_bytes);
- for (cluster = _mainsys->setAsize - 2; cluster >= 0; cluster--)
- set[cluster] = ~(cluster_type) 0;
- set[_mainsys->setAsize - 1] = 0;
- for (attr = _mainsys->attributes_num - 1;
- attr >= _cluster_bits * (_mainsys->setAsize - 1); attr--)
- AddSetA(set, attr);
- return set;
-}
-
-setO InitFullSetO(void)
-{
- int cluster, attr;
- setO set;
-
- set = (setA) malloc(_mainsys->setOsize * _cluster_bytes);
- for (cluster = _mainsys->setOsize - 2; cluster >= 0; cluster--)
- set[cluster] = ~(cluster_type) 0;
- set[_mainsys->setOsize - 1] = 0;
- for (attr = _mainsys->objects_num - 1;
- attr >= _cluster_bits * (_mainsys->setOsize - 1); attr--)
- AddSetO(set, attr);
- return set;
-}
-
-void TabToSetA(setA set, int num, int tab[])
-{
- int atr;
-
- ClearSetA(set);
- for (atr = 0; atr < num; atr++)
- AddSetA(set, tab[atr]);
-}
-
-void TabToSetO(setO set, int num, int tab[])
-{
- int obj;
-
- ClearSetO(set);
- for (obj = 0; obj < num; obj++)
- AddSetO(set, tab[obj]);
-}
-
-void ArgToSetA(setA set, int num, ...)
-{
- int atr;
- va_list list;
-
- ClearSetA(set);
- va_start(list, num);
- for (atr = 0; atr < num; atr++)
- AddSetA(set, va_arg(list, int));
-
- va_end(list);
-}
-
-void ArgToSetO(setO set, int num, ...)
-{
- int obj;
- va_list list;
-
- ClearSetO(set);
- va_start(list, num);
- for (obj = 0; obj < num; obj++)
- AddSetO(set, va_arg(list, int));
-
- va_end(list);
-}
-
-void CloseSetA(setA set)
-{
- free(set);
-}
-
-void CloseSetO(setA set)
-{
- free(set);
-}
-
-void OrSetO(setO or, setO s1, setO s2)
-{
- int cluster;
-
- for (cluster = _mainsys->setOsize - 1; cluster >= 0; cluster--)
- or[cluster] = s1[cluster] | s2[cluster];
- return;
-}
-
-void OrSetA(setA or, setA s1, setA s2)
-{
- int cluster;
-
- for (cluster = _mainsys->setAsize - 1; cluster >= 0; cluster--)
- or[cluster] = s1[cluster] | s2[cluster];
- return;
-}
-
-void AndSetO(setO and, setO s1, setO s2)
-{
- int cluster;
-
- for (cluster = _mainsys->setOsize - 1; cluster >= 0; cluster--)
- and[cluster] = s1[cluster] & s2[cluster];
- return;
-}
-
-void AndSetA(setA and, setA s1, setA s2)
-{
- int cluster;
-
- for (cluster = _mainsys->setAsize - 1; cluster >= 0; cluster--)
- and[cluster] = s1[cluster] & s2[cluster];
- return;
-}
-
-void DifSetO(setO dif, setO s1, setO s2)
-{
- int cluster;
-
- for (cluster = _mainsys->setOsize - 1; cluster >= 0; cluster--)
- dif[cluster] = s1[cluster] & ~s2[cluster];
- return;
-}
-
-void DifSetA(setA dif, setA s1, setA s2)
-{
- int cluster;
-
- for (cluster = _mainsys->setAsize - 1; cluster >= 0; cluster--)
- dif[cluster] = s1[cluster] & ~s2[cluster];
- return;
-}
-
-
-void NotSetO(setO not, setO set)
-{
- int cluster, obj;
-
- for (cluster = _mainsys->setOsize - 2; cluster >= 0; cluster--)
- not[cluster] = ~set[cluster];
- cluster = _mainsys->setOsize - 1;
- for (obj =
- _mainsys->objects_num - 1 - _cluster_bits * (_mainsys->setOsize - 1);
- obj >= 0; obj--)
- if (set[cluster] & _mask[obj])
- not[cluster] &= ~_mask[obj];
- else
- not[cluster] |= _mask[obj];
- return;
-}
-
-void NotSetA(setA not, setA set)
-{
- int cluster, attr;
-
- for (cluster = _mainsys->setAsize - 2; cluster >= 0; cluster--)
- not[cluster] = ~set[cluster];
- cluster = _mainsys->setAsize - 1;
- for (attr =
- _mainsys->attributes_num - 1 - _cluster_bits * (_mainsys->setAsize -
- 1); attr >= 0;
- attr--)
- if (set[cluster] & _mask[attr])
- not[cluster] &= ~_mask[attr];
- else
- not[cluster] |= _mask[attr];
- return;
-}
-
-void ClearSetO(setO set)
-{
- int cluster;
-
- for (cluster = _mainsys->setOsize - 1; cluster >= 0; cluster--)
- set[cluster] = 0;
- return;
-}
-
-void ClearSetA(setA set)
-{
- int cluster;
-
- for (cluster = _mainsys->setAsize - 1; cluster >= 0; cluster--)
- set[cluster] = 0;
- return;
-}
-
-void FillSetO(setO set)
-{
- int cluster, obj;
-
- for (cluster = _mainsys->setOsize - 2; cluster >= 0; cluster--)
- set[cluster] = ~(cluster_type) 0;
- set[_mainsys->setOsize - 1] = 0;
- for (obj = _mainsys->objects_num - 1;
- obj >= _cluster_bits * (_mainsys->setOsize - 1); obj--)
- AddSetO(set, obj);
- return;
-}
-
-void FillSetA(setA set)
-{
- int cluster, attr;
-
- for (cluster = _mainsys->setAsize - 2; cluster >= 0; cluster--)
- set[cluster] = ~(cluster_type) 0;
- set[_mainsys->setAsize - 1] = 0;
- for (attr = _mainsys->attributes_num - 1;
- attr >= _cluster_bits * (_mainsys->setAsize - 1); attr--)
- AddSetA(set, attr);
- return;
-}
-
-int AddSetO(setO set, int obj)
-{
- if (obj >= _mainsys->objects_num)
- ERROR(9)
- set[obj / _cluster_bits] |= _mask[obj % _cluster_bits];
- return 0;
-}
-
-int AddSetA(setA set, int attr)
-{
- if (attr >= _mainsys->attributes_num)
- ERROR(9)
- set[attr / _cluster_bits] |= _mask[attr % _cluster_bits];
- return 0;
-}
-
-int DelSetO(setO set, int obj)
-{
- if (obj >= _mainsys->objects_num)
- ERROR(9)
- set[obj / _cluster_bits] &= ~_mask[obj % _cluster_bits];
- return 0;
-}
-
-int DelSetA(setA set, int attr)
-{
- if (attr >= _mainsys->attributes_num)
- ERROR(9)
- set[attr / _cluster_bits] &= ~_mask[attr % _cluster_bits];
- return 0;
-}
-
-int InSetO(setO big, setO small)
-{
- int cluster;
-
- for (cluster = _mainsys->setOsize - 1; cluster >= 0; cluster--)
- if (big[cluster] != (big[cluster] | small[cluster]))
- return 0;
- return 1;
-}
-
-int InSetA(setA big, setA small)
-{
- int cluster;
-
- for (cluster = _mainsys->setAsize - 1; cluster >= 0; cluster--)
- if (big[cluster] != (big[cluster] | small[cluster]))
- return 0;
- return 1;
-}
-
-int ContSetA(setA set, int attr)
-{
- if (attr >= _mainsys->attributes_num)
- ERROR(9)
- return (_mask[attr % _cluster_bits] & set[attr / _cluster_bits]);
-}
-
-int ContSetO(setO set, int obj)
-{
- if (obj >= _mainsys->objects_num)
- ERROR(9)
- return (_mask[obj % _cluster_bits] & set[obj / _cluster_bits]);
-}
-
-int InterSetO(setO s1, setO s2)
-{
- int cluster;
-
- for (cluster = _mainsys->setOsize - 1; cluster >= 0; cluster--)
- if (s1[cluster] & s2[cluster])
- return 1;
- return 0;
-}
-
-int InterSetA(setA s1, setA s2)
-{
- int cluster;
-
- for (cluster = _mainsys->setAsize - 1; cluster >= 0; cluster--)
- if (s1[cluster] & s2[cluster])
- return 1;
- return 0;
-}
-
-
-int IsEmptySetO(setO set)
-{
- int cluster;
-
- for (cluster = _mainsys->setOsize - 1; cluster >= 0; cluster--)
- if (set[cluster])
- return 0;
- return 1;
-}
-
-int IsEmptySetA(setA set)
-{
- int cluster;
-
- for (cluster = _mainsys->setAsize - 1; cluster >= 0; cluster--)
- if (set[cluster])
- return 0;
- return 1;
-}
-
-int CardSetO(setO set)
-{
- int obj, card = 0;
-
- for (obj = _mainsys->objects_num - 1; obj >= 0; obj--)
- if (ContSetO(set, obj))
- card++;
- return card;
-}
-
-int CardSetA(setA set)
-{
- int cluster, attr, card = 0;
-
- for (cluster = _mainsys->setAsize - 2; cluster >= 0; cluster--)
- for (attr = _cluster_bits - 1; attr >= 0; attr--)
- if (_mask[attr] & set[cluster])
- card++;
- cluster = _mainsys->setAsize - 1;
- for (attr =
- _mainsys->attributes_num - 1 - _cluster_bits * (_mainsys->setAsize -
- 1); attr >= 0;
- attr--)
- if (_mask[attr] & set[cluster])
- card++;
- return card;
-}
-
-void CopySetO(setO dest, setO source)
-{
- int cluster;
-
- for (cluster = _mainsys->setOsize - 1; cluster >= 0; cluster--)
- dest[cluster] = source[cluster];
- return;
-}
-
-void CopySetA(setA dest, setA source)
-{
- int cluster;
-
- for (cluster = _mainsys->setAsize - 1; cluster >= 0; cluster--)
- dest[cluster] = source[cluster];
- return;
-}
-
-int CompSetO(setO set1, setO set2)
-{
- int cluster;
-
- for (cluster = _mainsys->setOsize - 1; cluster >= 0; cluster--)
- if (set1[cluster] != set2[cluster])
- return 0;
- return 1;
-}
-
-int CompSetA(setA set1, setA set2)
-{
- int cluster;
-
- for (cluster = _mainsys->setAsize - 1; cluster >= 0; cluster--)
- if (set1[cluster] != set2[cluster])
- return 0;
- return 1;
-}
-
-int SizeSetO(void)
-{
- return _mainsys->setOsize;
-}
-
-int SizeSetA(void)
-{
- return _mainsys->setAsize;
-}
-
-void AttrValSetO(setO set, int attr, value_type val)
-{
- int obj;
-
- ClearSetO(set);
- for (obj = 0; obj < _mainsys->objects_num; obj++)
- if (val == GetA(obj, attr))
- AddSetO(set, obj);
-}
-
-int ClassSetO(setO aclass, int obj, setA Q)
-{
- int i;
-
- ClearSetO(aclass);
- for (i = 0; i < _mainsys->objects_num; i++)
- if (CompareA(i, obj, Q))
- AddSetO(aclass, i);
- return 0;
-}
-
-
-void PrintSetO(setO set)
-{
- int obj, i = 0;
-
- printf("{");
- for (obj = 0; obj < _mainsys->objects_num; obj++)
- if (ContSetO(set, obj))
- printf("%c%i", (i++ > 0 ? ',' : ' '), obj);
- printf(" }\n");
-}
-
-void PrintSetA(setA set)
-{
- int attr, i = 0;
-
- printf("{");
- for (attr = 0; attr < _mainsys->attributes_num; attr++)
- if (ContSetA(set, attr))
- printf("%c%i", (i++ > 0 ? ',' : ' '), attr);
- printf(" }\n");
-}
Deleted: grass-addons/grass6/raster/mcda/r.roughset/rset.h
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/rset.h 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/rset.h 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,165 +0,0 @@
-
-/****************************************************************************
- *
- * MODULE: r.roughset
- * AUTHOR(S): GRASS module authors ad Rough Set Library (RSL) maintain:
- * G.Massei (g_massa at libero.it)-A.Boggia (boggia at unipg.it)
- * Rough Set Library (RSL) ver. 2 original develop:
- * M.Gawrys - J.Sienkiewicz
- *
- * PURPOSE: Geographics rough set analisys and knowledge discovery
- *
- * COPYRIGHT: (C) GRASS Development Team (2008)
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************/
-
-/*** ***/
-
-/*** OPERATIONS ON SETS OF ATTRIBUTES AND OBJECTS ***/
-
-/*** ***/
-
-/*** part of the RSL system written by M.Gawrys J. Sienkiewicz ***/
-
-/*** ***/
-
-/*****************************************************************************/
-
-
-#include <stdarg.h>
-
-extern cluster_type _mask[];
-extern int _cluster_bytes;
-extern int _cluster_bits;
-
-setO InitEmptySetO(void);
-setA InitEmptySetA(void);
-
- /* allocates memory for set and initializes it */
- /* as empty, returns allocated set */
-
-setO InitFullSetO(void);
-setO InitFullSetA(void);
-
- /* allocates memory for set and initializes it */
- /* as full, returns newly allocated set */
-
-void TabToSetO(setO set, int num, int tab[]);
-void TabToSetA(setA set, int num, int tab[]);
-
- /* sets a set with num elements of table tab */
-
-void ArgToSetO(setO set, int num, ...);
-void ArgToSetA(setA set, int num, ...);
-
- /* sets a set with num arguments of function */
-
-void CloseSetO(setO set);
-void CloseSetA(setA set);
-
- /* free memory used by set */
-
-void OrSetO(setO or, setO s1, setO s2);
-void OrSetA(setA or, setA s1, setA s2);
-
- /* puts union of s1 and s2 to or */
-
-void AndSetO(setO and, setO s1, setO s2);
-void AndSetA(setA and, setA s1, setA s2);
-
- /* puts product of s1 and s2 to and */
-
-void DifSetO(setO dif, setO s1, setO s2);
-void DifSetA(setA dif, setA s1, setA s2);
-
- /* puts complement of s1 in s2 to dif */
-
-void NotSetO(setO not, setO set);
-void NotSetA(setO not, setA set);
-
- /* puts a complement of set to not */
-
-void ClearSetO(setO set);
-void ClearSetA(setA set);
-
- /* clears set */
-
-void FillSetO(setO set);
-void FillSetA(setA set);
-
- /* fills set with domain */
-
-int AddSetO(setO set, int obj);
-int AddSetA(setA set, int attr);
-
- /* adds element to set */
-
-int DelSetO(setO set, int obj);
-int DelSetA(setA set, int attr);
-
- /* deletes element from set */
-
-int InSetO(setO big, setO small);
-int InSetA(setA big, setA small);
-
- /* return 1 if set big contains set small */
- /* otherwise returns 0 */
-
-int ContSetO(setO set, int obj);
-int ContSetA(setA set, int attr);
-
- /* returns 1 if set contains element */
- /* otherwise returns 0 */
-
-int InterSetO(setO s1, setO s2);
-int InterSetA(setA s1, setA s2);
-
- /* returns 1 if s1 and s2 have nonempty product */
- /* otherwise returns 0 */
-
-int IsEmptySetO(setO set);
-int IsEmptySetA(setA set);
-
- /* returns 1 if set is empty */
- /* otherwise returns 0 */
-
-int CardSetO(setO set);
-int CardSetA(setA set);
-
- /* returns cardinality of set */
-
-void CopySetO(setO dest, setO source);
-void CopySetA(setA dest, setO source);
-
- /* copy source to dest */
-
-int CompSetO(setO set1, setO set2);
-int CompSetA(setA set1, setA set2);
-
- /* returns 1 if set1 and set2 are identical */
- /* otherwise returns 0 */
-
-int SizeSetO(void);
-int SizeSetA(void);
-
- /* returns number of clusters in set representation */
- /* in the active system sizeof(cluster_type)=_cluster_bytes */
-
-void AttrValSetO(setO set, int attr, value_type val);
-
- /* puts into set all object that have value val */
- /* on attribute attr */
-
-int ClassSetO(setO aclass, int obj, setA Q);
-
- /* fills class with all object that have the same values */
- /* on all attributes from Q as the object obj, uses MATA */
-
-void PrintSetO(setO set);
-void PrintSetA(setA set);
-
- /* outputs set to screen */
Deleted: grass-addons/grass6/raster/mcda/r.roughset/rsystem.c
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/rsystem.c 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/rsystem.c 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,564 +0,0 @@
-/****************************************************************************
- *
- * MODULE: r.roughset
- * AUTHOR(S): GRASS module authors and Rough Set Library (RSL) maintain:
- * G.Massei (g_massa at libero.it)-A.Boggia (boggia at unipg.it)
- * Rough Set Library (RSL) ver. 2 original develop:
- * M.Gawrys - J.Sienkiewicz
- *
- * PURPOSE: Geographics rough set analisys and knowledge discovery
- *
- * COPYRIGHT: (C) A.Boggia - G.Massei (2008)
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************/
-/*** ***/
-/*** SYSTEM HANDLING FUNCTIONS ***/
-/*** ***/
-/*** part of the RSL system written by M.Gawrys J.Sienkiewicz ***/
-/*** ***/
-/*****************************************************************************/
-
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include "rough.h"
-
-SYSTEM *_mainsys=NULL;
-int _rerror=0;
-
-SYSTEM *InitEmptySys(void)
-{
- SYSTEM *sys;
- int i;
- cluster_type mask=1;
- if ((sys=(SYSTEM *)malloc(sizeof(SYSTEM)))==NULL)
- {
- _rerror=3;
- return NULL;
- }
- for (i=0; i<_cluster_bits; i++)
- {
- _mask[i]=mask;
- mask <<= 1;
- }
- sys->attributes_num=0;
- sys->objects_num=0;
- sys->description=NULL;
- sys->descr_size=0;
- sys->setAsize=0;
- sys->setOsize=0;
- sys->matA=NULL;
- sys->matD=NULL;
- sys->matX=NULL;
- sys->matXsize=0;
- return sys;
-}
-
-void SetParameters(SYSTEM *sys,int obj_num,int attr_num)
-{
- sys->attributes_num=attr_num;
- sys->objects_num=obj_num;
- sys->setAsize=1+(attr_num-1)/_cluster_bits;
- sys->setOsize=1+(obj_num-1)/_cluster_bits;
-}
-
-void ConnectDescr(SYSTEM *sys,void *descr,int size)
-{
- sys->description=descr;
- sys->descr_size=size;
-}
-
-void SetName(SYSTEM *sys,char *name)
-{
- strncpy(sys->name,name,50);
-}
-
-int FileToSys(SYSTEM *sys,char *filename)
-{
- FILE *source;
- value_type *buf;
- int descr_size,matAsize;
- long len1,len2;
- char string[50];
- int c,n=0;
- if (sys->matA!=NULL)
- {
- free(sys->matA);
- sys->matA=NULL;
- }
- if (sys->matD!=NULL)
- {
- free(sys->matD);
- sys->matD=NULL;
- }
- if (sys->matX!=NULL)
- {
- free(sys->matX);
- sys->matX=NULL;
- }
- if (sys->description!=NULL)
- {
- free(sys->description);
- sys->description=NULL;
- }
- if ((source=fopen(filename,"r"))==NULL)
- ERROR(1)
- if (!fscanf(source,"NAME%c",string))
- ERROR(2)
- if (string[0]!=':') ERROR(2)
- if (!fgets(sys->name,48,source))
- ERROR(2)
- if (sys->name[strlen(sys->name)-1]=='\n')
- sys->name[strlen(sys->name)-1]='\0';
- else
- while (fgetc(source)!='\n' && !feof(source));
- if (!fscanf(source,"ATTRIBUTES:%i\n",&(sys->attributes_num)))
- ERROR(2)
- if (!fscanf(source,"OBJECTS:%i\n",&(sys->objects_num)))
- ERROR(2)
- sys->setAsize=1+(sys->attributes_num-1)/_cluster_bits;
- sys->setOsize=1+(sys->objects_num-1)/_cluster_bits;
- matAsize=(sys->objects_num)*(sys->attributes_num);
- if ((buf=(value_type*)(setA)malloc(sizeof(value_type)*matAsize))==NULL)
- ERROR(3)
- while (!feof(source) && n<matAsize)
- if (fscanf(source,"%s",string)==NULL)
- ERROR(2)
- else if (string[0]=='?' || string[0]=='*')
- buf[n++]=(value_type)-1;
- else if (sscanf(string,"%d",&c)==NULL)
- ERROR(2)
- else buf[n++]=(value_type)c;
- sys->matA=buf;
- while (isspace(fgetc(source)));
- if (!feof(source))
- {
- len1=ftell(source)-1;
- fseek(source,0l,SEEK_END);
- len2=ftell(source);
- fseek(source,len1,SEEK_SET);
- descr_size=(int)(len2-len1);
- buf=(value_type *)(setA)malloc(descr_size);
- fread(buf,sizeof(char),descr_size,source);
- sys->description=buf;
- sys->descr_size=descr_size;
- }
- fclose(source);
- return 1;
-}
-
-void ConnectA(SYSTEM *sys,value_type *buf)
-{
- sys->matA=buf;
-}
-
-void PutA(SYSTEM *sys,int obj,int atr,value_type val)
-{
- (sys->matA)[obj*(sys->attributes_num)+atr]=val;
-}
-
-int FillAfromAscii(SYSTEM *sys,FILE *file)
-{
- int k=0,j;
- while (!feof(file)&&(k<Asize(sys)))
- {
- if (fscanf(file,"%d",&j)==NULL) ERROR(2);
- *(sys->matA+k++)=j;
- }
- return 0;
-}
-
-int InitD(SYSTEM *sys)
-{
- cluster_type *buf;
- int nby=(sys->attributes_num)/_cluster_bits; /* number of full clusters in element of tableD */
- int nbi=sys->attributes_num%_cluster_bits; /* number of bits in the last cluster */
- int atrnum=sys->attributes_num; /* number of attributes */
- int row,column,cluster,bit;
- value_type *A=sys->matA;
- cluster_type val,*ptr;
- if (A==NULL)
- ERROR(5);
- if ((buf=(setA)malloc(MatMemSize(sys,MATD)))==NULL)
- ERROR(3);
- ptr=buf;
- for (row=1;row<sys->objects_num;row++)
- for (column=0;column<row;column++)
- {
- for (cluster=0;cluster<nby;cluster++)
- {
- val=0;
- for (bit=0;bit<_cluster_bits;bit++)
- if (A[row*atrnum+_cluster_bits*cluster+bit]!=A[column*atrnum+_cluster_bits*cluster+bit] &&
- A[row*atrnum+_cluster_bits*cluster+bit]!=(value_type)-1 &&
- A[column*atrnum+_cluster_bits*cluster+bit]!=(value_type)-1 )
- val=val|_mask[bit];
- *ptr=val;
- ptr++;
- }
- if (nbi)
- {
- val=0;
- for (bit=0;bit<nbi;bit++)
- if (A[row*atrnum+_cluster_bits*cluster+bit]!=A[column*atrnum+_cluster_bits*cluster+bit] &&
- A[row*atrnum+_cluster_bits*cluster+bit]!=(value_type)-1 &&
- A[column*atrnum+_cluster_bits*cluster+bit]!=(value_type)-1 )
- val=val|_mask[bit];
- *ptr=val;
- ptr++;
- }
- }
- sys->matD=buf;
- return MatMemSize(sys,MATD);
-}
-
-int InitX(SYSTEM* sys,setA P,setA Q,int matrix_type)
-{
- setA head,tail,el,el1;
- int memo=1,count=0,no,dif,size,MEMOKWANT=Asize(_mainsys);
- size=_mainsys->setAsize;
- if ((head=(setA)malloc(MEMOKWANT))==NULL) ERROR(3);
- tail=head;
- el=InitEmptySetA();
- for (start_of_tab(matrix_type);end_of_tab();next_of_tab())
- {
- if ( !InterSetA(_table_element,Q) ) continue;
- AndSetA(el,P,_table_element);
- if ( IsEmptySetA(el) ) continue;
- no=0;
- dif=0;
- for (el1=head;el1<tail;el1+=size)
- if (InSetA(el,el1))
- {
- no=1;
- break;
- }
- else
- {
- if (InSetA(el1,el)) dif+=size,count--;
- else if (dif) CopySetA(el1-dif,el1);
- }
- if (!no)
- {
- if ((memo*MEMOKWANT)<((count+1)*size*_cluster_bytes))
- if ((head=(setA)realloc(head,++memo*MEMOKWANT))==NULL)
- {
- CloseSetA(el);
- ERROR(3);
- }
- CopySetA(head+count*size,el);
- count++;
- tail=head+count*size;
- }
- }
- CloseSetA(el);
- if ((head=(setA)realloc(head,count*size*_cluster_bytes))==NULL) ERROR(3);
- sys->matX=head;
- sys->matXsize=count*size;
- return(count);
-}
-
-int InitXforObject(SYSTEM* sys,int obj,setA P,setA Q,int matrix_type)
-{
- setA head,tail,el,el1;
- int memo=1,count=0,no,dif,MEMOKWANT=Asize(_mainsys);
- int size=_mainsys->setAsize;
- int obj2;
- if ((head=(setA)malloc(MEMOKWANT))==NULL)
- ERROR(3);
- tail=head;
- el=InitEmptySetA();
- for (obj2=0; obj2<_mainsys->objects_num; obj2++)
- {
- if ( obj==obj2 ) continue;
- if ( matrix_type==MATA ) GetDfromA( el, obj, obj2 );
- else
- {
- _table_element=GetD( obj, obj2 );
- CopySetA( el, _table_element );
- }
- if ( !InterSetA(el,Q) ) continue;
- AndSetA(el,P,el);
- if ( IsEmptySetA(el) ) continue;
- no=0;
- dif=0;
- for (el1=head;el1<tail;el1+=size)
- if (InSetA(el,el1))
- {
- no=1;
- break;
- }
- else
- {
- if (InSetA(el1,el)) dif+=size,count--;
- else if (dif) CopySetA(el1-dif,el1);
- }
- if (!no)
- {
- if ((memo*MEMOKWANT)<((count+1)*size*_cluster_bytes))
- if ((head=(setA)realloc(head,++memo*MEMOKWANT))==NULL)
- {
- CloseSetA(el);
- ERROR(3);
- }
- CopySetA(head+count*size,el);
- count++;
- tail=head+count*size;
- }
- }
- CloseSetA(el);
- if ((head=(setA)realloc(head,count*size*_cluster_bytes))==NULL)
- if (count>0) ERROR(3);
- sys->matX=head;
- sys->matXsize=count*size;
- return(count);
-}
-
-int InitXforObjects(SYSTEM* sys,setO objects,setA P,setA Q,int matrix_type)
-{
- setA head,tail,el,el1;
- int memo=1,count=0,no,dif,size,MEMOKWANT=Asize(_mainsys);
- size=_mainsys->setAsize;
- if ((head=(setA)malloc(MEMOKWANT))==NULL) ERROR(3);
- tail=head;
- el=InitEmptySetA();
- for (start_of_tab(matrix_type);end_of_tab();next_of_tab())
- {
- if ( !ContSetO(objects,_table_row) &&
- !ContSetO(objects,_table_column) ) continue;
- if ( !InterSetA(_table_element,Q) ) continue;
- AndSetA(el,P,_table_element);
- if ( IsEmptySetA(el) ) continue;
- no=0;
- dif=0;
- for (el1=head;el1<tail;el1+=size)
- if (InSetA(el,el1))
- {
- no=1;
- break;
- }
- else
- {
- if (InSetA(el1,el)) dif+=size,count--;
- else if (dif) CopySetA(el1-dif,el1);
- }
- if (!no)
- {
- if ((memo*MEMOKWANT)<((count+1)*size*_cluster_bytes))
- if ((head=(setA)realloc(head,++memo*MEMOKWANT))==NULL)
- {
- CloseSetA(el);
- ERROR(3);
- }
- CopySetA(head+count*size,el);
- count++;
- tail=head+count*size;
- }
- }
- CloseSetA(el);
- if ((head=(setA)realloc(head,count*size*_cluster_bytes))==NULL) ERROR(3);
- sys->matX=head;
- sys->matXsize=count*size;
- return(count);
-}
-
-int InitXforObjectFromClass(SYSTEM* sys,int obj,setA P,setO aclass,int matrix_type)
-{
- setA head,tail,el,el1;
- int memo=1,count=0,no,dif,MEMOKWANT=Asize(_mainsys);
- int size=_mainsys->setAsize;
- int obj2;
- if ((head=(setA)malloc(MEMOKWANT))==NULL) ERROR(3);
- tail=head;
- el=InitEmptySetA();
- for (obj2=0; obj2<_mainsys->objects_num; obj2++)
- {
- if ( ContSetO( aclass, obj2 ) ) continue;
- if ( matrix_type==MATA ) GetDfromA( el, obj, obj2 );
- else
- {
- _table_element=GetD( obj, obj2 );
- CopySetA( el, _table_element );
- }
- AndSetA(el,P,el);
- if ( IsEmptySetA(el) ) continue;
- no=0;
- dif=0;
- for (el1=head;el1<tail;el1+=size)
- if (InSetA(el,el1))
- {
- no=1;
- break;
- }
- else
- {
- if (InSetA(el1,el)) dif+=size,count--;
- else if (dif) CopySetA(el1-dif,el1);
- }
- if (!no)
- {
- if ((memo*MEMOKWANT)<((count+1)*size*_cluster_bytes))
- if ((head=(setA)realloc(head,++memo*MEMOKWANT))==NULL)
- {
- CloseSetA(el);
- ERROR(3);
- }
- CopySetA(head+count*size,el);
- count++;
- tail=head+count*size;
- }
- }
- CloseSetA(el);
- if ((head=(setA)realloc(head,count*size*_cluster_bytes))==NULL) ERROR(3);
- sys->matX=head;
- sys->matXsize=count*size;
- return(count);
-}
-
-
-
-void UseSys(SYSTEM *sys)
-{
- _mainsys=sys;
-}
-
-int SysToFile(SYSTEM *sys,char *filename)
-{
- FILE *output;
- int attr,obj;
- if ((output=fopen(filename,"wb"))==NULL)
- ERROR(1)
- if (!fprintf(output,"NAME: %s\n",sys->name))
- ERROR(4)
- if (!fprintf(output,"ATTRIBUTES: %i\n",sys->attributes_num))
- ERROR(4);
- if (!fprintf(output,"OBJECTS: %i\n\n",sys->objects_num))
- ERROR(4);
- for (obj=0;obj<sys->objects_num;obj++)
- {
- for (attr=0;attr<sys->attributes_num;attr++)
- if (sys->matA[obj*sys->attributes_num+attr]==(value_type)-1 )
- {
- if (!fprintf(output,"%c ",'?'))
- ERROR(4)
- }
- else if (!fprintf(output,"%i ",sys->matA[obj*sys->attributes_num+attr]))
- ERROR(4)
- fprintf(output,"\n");
- }
- if (sys->descr_size!=0)
- {
- fprintf(output,"\n");
- fwrite(sys->description,sizeof(char),sys->descr_size,output);
- }
- fclose(output);
- return 1;
-}
-
-void CloseSys(SYSTEM *sys)
-{
- if (sys->matA) free(sys->matA);
- if (sys->matD) free(sys->matD);
- if (sys->matX) free(sys->matX);
- if (sys->description) free(sys->description);
- free(sys);
-}
-
-void CloseMat(SYSTEM *sys, int matrix_type)
-{
- switch (matrix_type)
- {
- case (MATA): if (sys->matA) free(sys->matA);
- sys->matA=NULL;
- return;
- case (MATD): if (sys->matD) free(sys->matD);
- sys->matD=NULL;
- return;
- case (MATX): if (sys->matX) free(sys->matX);
- sys->matX=NULL;
- return;
- default:
- _rerror=8;
- }
-}
-
-void DisconMat(SYSTEM *sys, int matrix_type)
-{
- switch (matrix_type)
- {
- case (MATA): sys->matA=NULL;
- return;
- case (MATD): sys->matD=NULL;
- return;
- case (MATX): sys->matX=NULL;
- return;
- default:
- _rerror=8;
- }
-}
-
-unsigned int Asize(SYSTEM *sys)
-{
- return (unsigned int)(sys->attributes_num)
- *(unsigned int)(sys->objects_num);
-}
-
-unsigned int Dsize(SYSTEM *sys)
-{
- return (unsigned int)(sys->objects_num-1)
- *(unsigned int)(sys->objects_num)/2
- *(unsigned int)(sys->setAsize);
-}
-
-unsigned int Xsize(SYSTEM *sys)
-{
- return sys->matXsize;
-}
-
-unsigned int MatMemSize(SYSTEM *sys,int matrix_type)
-{
- switch (matrix_type)
- {
- case (MATA): return Asize(sys)*sizeof(value_type);
- case (MATD): return Dsize(sys)*sizeof(cluster_type);
- case (MATX): return Xsize(sys)*sizeof(cluster_type);
- }
- ERROR(8)
-}
-
-void *MatExist(SYSTEM *sys,int matrix_type)
-{
- switch (matrix_type)
- {
- case (MATA): return (void *)sys->matA;
- case (MATD): return (void *)sys->matD;
- case (MATX): return (void *)sys->matX;
- }
- _rerror=8;
- return NULL;
-}
-
-int ObjectsNum(SYSTEM *sys)
-{
- return sys->objects_num ;
-}
-
-int AttributesNum(SYSTEM *sys)
-{
- return sys->attributes_num;
-}
-
-void *Description(SYSTEM *sys)
-{
- return sys->description;
-}
-
-char *SysName(SYSTEM *sys)
-{
- return sys->name;
-}
Deleted: grass-addons/grass6/raster/mcda/r.roughset/rsystem.h
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/rsystem.h 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/rsystem.h 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,172 +0,0 @@
-
-/****************************************************************************
- *
- * MODULE: r.roughset
- * AUTHOR(S): GRASS module authors ad Rough Set Library (RSL) maintain:
- * G.Massei (g_massa at libero.it)-A.Boggia (boggia at unipg.it)
- * Rough Set Library (RSL) ver. 2 original develop:
- * M.Gawrys - J.Sienkiewicz
- *
- * PURPOSE: Geographics rough set analisys and knowledge discovery
- *
- * COPYRIGHT: (C) GRASS Development Team (2008)
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************/
-
-/*** ***/
-
-/*** SYSTEM HANDLING FUNCTIONS ***/
-
-/*** ***/
-
-/*** part of the RSL system written by M.Gawrys J.Sienkiewicz ***/
-
-/*** ***/
-
-/*****************************************************************************/
-
-#include <stdio.h>
-
-extern SYSTEM *_mainsys;
-
- /* active information system */
-
-extern int _rerror;
-
- /* error code */
-
-SYSTEM *InitEmptySys(void);
-
- /* allocates memory for a new system descriptor */
- /* and clears all parameters, no matrices connected */
-
-void SetParameters(SYSTEM * sys, int objects_num, int attributes_num);
-
- /* puts system parameters to the system descriptor */
-
-void ConnectDescr(SYSTEM * sys, void *descr, int size);
-
- /* connects additional description to the system descriptor */
-
-void SetName(SYSTEM * sys, char *name);
-
- /* puts system name to the system descriptor */
-
-int FileToSys(SYSTEM * sys, char *filename);
-
- /* imports system from the special format file */
- /* including parameters, desicripton and matrix A */
- /* other matrices are left uninitialed */
-
-int SysToFile(SYSTEM * sys, char *filename);
-
- /* exports system descriptor, additional description */
- /* and matrix A to a special format file */
-
-void ConnectA(SYSTEM * sys, value_type * buf);
-
- /* connects matrix A (it may be empty) with */
- /* the system descriptor */
-
-void PutToA(SYSTEM * sys, int object, int attribute, value_type value);
-
- /* sets value to element of matrix A */
-
-int FillAfromAscii(SYSTEM * sys, FILE * file);
-
- /* fills matrix A with the values from Ascii file */
-
-int InitD(SYSTEM * sys);
-
- /* fills matrix D from A, allocates memory */
- /* and connects it with the system descriptor */
- /* matrix A must already exist */
-
-int InitX(SYSTEM * sys, setA P, setA Q, int matrix_type);
-
- /* fills matrix X, allocates memory for it and */
- /* connects it with the system descriptor */
- /* matrix_type indicates the source matrix */
- /* initialization is done with respect to Q from P */
-
-int InitXforObject(SYSTEM * sys, int obj, setA P, setA Q, int matrix_type);
-
- /* works like InitX but considers only single column of MATD */
-
-int InitXforObjects(SYSTEM * sys, setO objects, setA P, setA Q,
- int matrix_type);
- /* works like InitX but concider only columns of MATD */
- /* belonging to objects */
-
-int InitXforObjectFromClass(SYSTEM * sys, int obj, setA P, setO aclass,
- int matrix_type);
- /* works like InitX, conciders only specified objects */
- /* initialization is done with respect to objects from */
- /* outside of aclass */
-
-void UseSys(SYSTEM * sys);
-
- /* makes indicated system active, from now on */
- /* all query routines will operate only on it */
-
-void CloseSys(SYSTEM * sys);
-
- /* frees memory allocated for all matrixes, */
- /* system descriptor and additional description */
-
-void CloseMat(SYSTEM * sys, int matrix_type);
-
- /* disconnects matrix X from the system descriptor */
- /* and frees memory */
-
-void DisconMat(SYSTEM * sys, int matrix_type);
-
- /* disconnects matrix from the system descriptor */
- /* does not free memory */
-
-unsigned int Asize(SYSTEM * sys);
-
- /* returns number of elements in matrix A */
- /* memory size = Asize * sizeof(value_type) */
- /* system parameters should be valued */
-
-unsigned int Dsize(SYSTEM * sys);
-
- /* returns number of memory clusters for matrix D */
- /* memory size = Dsize * sizeof(cluster_type) */
- /* system parameters should be valued */
-
-unsigned int Xsize(SYSTEM * sys);
-
- /* returns number of memory cluster used by matrix X */
- /* memory size = Xsize * sizeof(cluster_type) */
- /* matrix X should be generated */
-
-unsigned int MatMemSize(SYSTEM * sys, int matrix_type);
-
- /* returns the size of memory used by specified matrix */
-
-void *MatExist(SYSTEM * sys, int matrix_type);
-
- /* return specified matrix if exist */
- /* otherwise returns NULL */
-
-int ObjectsNum(SYSTEM * sys);
-
- /* returns number of objects in the system */
-
-int AttributesNum(SYSTEM * sys);
-
- /* returns number of attributes in the system */
-
-void *Description(SYSTEM * sys);
-
- /* returns pointer to additional description */
-
-char *SysName(SYSTEM * sys);
-
- /* returns system name */
Deleted: grass-addons/grass6/raster/mcda/r.roughset/rule1.c
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/rule1.c 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/rule1.c 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,55 +0,0 @@
-
-/****************************************************************************
- *
- * MODULE: r.roughset
- * AUTHOR(S): GRASS module authors ad Rough Set Library (RSL) maintain:
- * G.Massei (g_massa at libero.it)-A.Boggia (boggia at unipg.it)
- * Rough Set Library (RSL) ver. 2 original develop:
- * M.Gawrys - J.Sienkiewicz
- *
- * PURPOSE: Geographics rough set analisys and knowledge discovery
- *
- * COPYRIGHT: (C) A.Boggia - G.Massei (2008)
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************/
-/*** ***/
-/*** SOME MORE QUERIES FOR SYSTEM ***/
-/*** ( MENAGING RULES ) ***/
-/*** ***/
-/*** part of the ROUGH system written by M.Gawrys J.Sienkiewicz ***/
-/*** ***/
-/*****************************************************************************/
-
-
-#include <stdlib.h>
-#include <string.h>
-#include "rough.h"
-
-void RuleCopy(value_type * dest, value_type * source)
-{
- memcpy(dest, source, _mainsys->attributes_num * sizeof(value_type));
-}
-
-int RuleEQ(value_type * first, value_type * second)
-{
- return !memcmp(first, second,
- _mainsys->attributes_num * sizeof(value_type));
-}
-
-
-void AddRule(value_type * rules, int *count, value_type * rule)
-{
- int i;
- int size = _mainsys->attributes_num;
-
- for (i = 0; i < *count; i++)
- if (RuleEQ(rules + i * size, rule))
- return;
- RuleCopy(rules + (*count) * size, rule);
- *count += 1;
- return;
-}
Deleted: grass-addons/grass6/raster/mcda/r.roughset/rule1.h
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/rule1.h 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/rule1.h 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,48 +0,0 @@
-
-/****************************************************************************
- *
- * MODULE: r.roughset
- * AUTHOR(S): GRASS module authors ad Rough Set Library (RSL) maintain:
- * G.Massei (g_massa at libero.it)-A.Boggia (boggia at unipg.it)
- * Rough Set Library (RSL) ver. 2 original develop:
- * M.Gawrys - J.Sienkiewicz
- *
- * PURPOSE: Geographics rough set analisys and knowledge discovery
- *
- * COPYRIGHT: (C) GRASS Development Team (2008)
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************/
-
-/*** ***/
-
-/*** SOME MORE QUERIES FOR SYSTEM ***/
-
-/*** ( MENAGING RULES ) ***/
-
-/*** ***/
-
-/*** part of the RSL system written by M.Gawrys J.Sienkiewicz ***/
-
-/*** ***/
-
-/*****************************************************************************/
-
-
-#define MINUS ((value_type)-1)
-
-void RuleCopy(value_type * dest, value_type * source);
-
- /* copies a rule from source to dest */
-
-int RuleEQ(value_type * first, value_type * second);
-
- /* returns 1 if first rule is equal to second */
-
-void AddRule(value_type * rules, int *size, value_type * rule);
-
- /* adds new rule to array of rules */
- /* if the rule is unique size is incremented */
Deleted: grass-addons/grass6/raster/mcda/r.roughset/rule2.c
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/rule2.c 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/rule2.c 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,666 +0,0 @@
-
-/****************************************************************************
- *
- * MODULE: r.roughset
- * AUTHOR(S): GRASS module authors ad Rough Set Library (RSL) maintain:
- * G.Massei (g_massa at libero.it)-A.Boggia (boggia at unipg.it)
- * Rough Set Library (RSL) ver. 2 original develop:
- * M.Gawrys - J.Sienkiewicz
- *
- * PURPOSE: Geographics rough set analisys and knowledge discovery
- *
- * COPYRIGHT: (C) A.Boggia - G.Massei (2008)
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************/
-/*** ***/
-/*** SOME MORE QUERIES FOR SYSTEM ***/
-/*** ( FINDING RULES ) ***/
-/*** ***/
-/*** part of the RSL system written by M.Gawrys J.Sienkiewicz ***/
-/*** ***/
-/*****************************************************************************/
-
-
-#include "rough.h"
-#include <stdlib.h>
-#include <string.h>
-
-int AllRules(value_type ** rules, setA P, setA Q, int matrix_type)
-{
- int obj, attr, n, red;
- int memo = _mainsys->objects_num;
- int count = 0;
- int size = _mainsys->setAsize;
- setA reducts = NULL;
- value_type *rule = NULL;
-
- *rules =
- (value_type *) malloc(memo * _mainsys->attributes_num *
- sizeof(value_type));
- if (*rules == NULL)
- ERROR(3);
- if (!MatExist(_mainsys, MATA))
- ERROR(5);
- rule =
- (value_type *) malloc(_mainsys->attributes_num * sizeof(value_type));
- if (rule == NULL)
- ERROR(3);
- for (obj = 0; obj < _mainsys->objects_num; obj++)
- {
- if (InitXforObject(_mainsys, obj, P, Q, matrix_type) < 0)
- {
- free(rule);
- return (-_rerror);
- }
- else if (!MatExist(_mainsys, MATX))
- continue;
- n = Red(&reducts, MATX);
- CloseMat(_mainsys, MATX);
- if (memo < count + n)
- {
- memo = count + n;
- if ((*rules = (value_type *) realloc(*rules,
- memo *
- _mainsys->attributes_num *
- sizeof(value_type))) ==
- NULL)
- {
- free(reducts);
- free(rule);
- ERROR(3)
- }
- }
- for (red = 0; red < n; red++)
- {
- for (attr = _mainsys->attributes_num - 1; attr >= 0; attr--)
- if (ContSetA(reducts + red * size, attr) || ContSetA(Q, attr))
- rule[attr] = GetA(obj, attr);
- else
- rule[attr] = MINUS;
- AddRule(*rules, &count, rule);
- }
- if (n > 0)
- free(reducts);
- reducts = NULL;
- }
- free(rule);
- if ((*rules = (value_type *) realloc
- (*rules,
- count * _mainsys->attributes_num * sizeof(value_type))) == NULL)
- ERROR(3);
- return count;
-}
-
-int AllRulesForReducts(value_type ** rules, cluster_type * reducts,
- int N, setA Q, int matrix_type)
-{
- int red, num, i, count = 0;
- value_type *newrules = NULL; /* rules for a single reduct */
-
- *rules = NULL;
- for (red = 0; red < N; red++)
- {
- num =
- AllRules(&newrules, reducts + red * _mainsys->setAsize, Q,
- matrix_type);
- if ((*rules =
- (value_type *) realloc(*rules,
- (count +
- num) * _mainsys->attributes_num *
- sizeof(value_type))) == NULL)
- {
- free(newrules);
- ERROR(3)
- }
- for (i = 0; i < num; i++)
- AddRule(*rules, &count, newrules + i * _mainsys->attributes_num);
- if (num > 0)
- free(newrules);
- newrules = NULL;
- }
- if ((*rules = (value_type *) realloc
- (*rules,
- count * _mainsys->attributes_num * sizeof(value_type))) == NULL)
- ERROR(3);
- return count;
-}
-
-
-int SelectRules(value_type ** rules, int *N, setO set, setA P, int option)
-{
- int i, j, obj, find, newXsize,
- newN = 0, next = -1, size = _mainsys->attributes_num;
- setA red, newfull;
- SYSTEM *oldsys = _mainsys, *newsys = InitEmptySys();
- cluster_type *newX;
- value_type *newrules;
-
- SetParameters(newsys, *N, *N);
- newXsize = CardSetO(set) * (newsys->setAsize);
- newX = (cluster_type *) calloc(newXsize, _cluster_bytes);
- if (newX == NULL)
- {
- CloseSys(newsys);
- ERROR(3);
- }
- for (obj = 0; obj < _mainsys->objects_num; obj++)
- if (ContSetO(set, obj))
- for (i = 0, next++; i < *N; i++)
- {
- find = 1;
- for (j = 0; j < _mainsys->attributes_num; j++)
- {
- if (!ContSetA(P, j))
- continue;
- if ((*rules + i * size)[j] != GetA(obj, j))
- if ((*rules + i * size)[j] != MINUS)
- {
- find = 0;
- break;
- }
- }
- if (find)
- newX[next * newsys->setAsize + i / _cluster_bits] |=
- _mask[i % _cluster_bits];
- }
- UseSys(newsys);
- newsys->matX = newX;
- newsys->matXsize = newXsize;
- newfull = InitFullSetA();
- InitX(newsys, newfull, newfull, MATX);
- free(newX);
- CloseSetA(newfull);
- if (_rerror != 0)
- {
- free(newsys);
- UseSys(oldsys);
- ERROR(3);
- }
- if (option == BESTOPT)
- {
- i = Red(&red, MATX);
- j = SelectOneShort(red, i);
- }
- else
- {
- red = InitEmptySetA();
- RedOptim(red, MATX);
- j = 0;
- }
- newN = CardSetA(red + j * newsys->setAsize);
- newrules = (value_type *) malloc(newN * oldsys->attributes_num *
- sizeof(value_type));
- if (newrules == NULL)
- {
- CloseSys(newsys);
- UseSys(oldsys);
- ERROR(3);
- }
- for (i = 0, obj = 0; i < *N; i++)
- if (ContSetA(red + j * newsys->setAsize, i))
- memcpy(newrules + obj++ * oldsys->attributes_num,
- *rules + i * oldsys->attributes_num,
- oldsys->attributes_num * sizeof(value_type));
- if (option == BESTOPT)
- free(red);
- else
- CloseSetA(red);
- if (*N > 0)
- free(*rules);
- *N = newN;
- *rules = newrules;
- UseSys(oldsys);
- CloseSys(newsys);
- return 0;
-}
-
-int BestRules(value_type ** rules, setA P, setA Q, int matrix_type)
-{
- int i, obj, num = 0, /* total number of rules */
- classnum = 0; /* number of rules for class */
- setO processed, /* already covered objects */
- newclass; /* class */
- value_type *classrules = NULL; /* rules for a single class */
-
- *rules = (value_type *) malloc(Asize(_mainsys) * sizeof(value_type));
- if (*rules == NULL)
- ERROR(3);
- if (!MatExist(_mainsys, MATA))
- ERROR(5);
- processed = InitEmptySetO();
- newclass = InitEmptySetO();
- for (obj = 0; obj < _mainsys->objects_num; obj++)
- if (!ContSetO(processed, obj))
- {
- ClassSetO(newclass, obj, Q);
- classnum = 0;
- OrSetO(processed, processed, newclass);
- classnum =
- BestRulesForClass(&classrules, newclass, P, Q, matrix_type);
- for (i = 0; i < classnum; i++)
- AddRule(*rules, &num,
- classrules + i * _mainsys->attributes_num);
- if (classnum > 0)
- free(classrules);
- classrules = NULL;
- }
- CloseSetO(processed);
- CloseSetO(newclass);
- if ((*rules = (value_type *) realloc(*rules,
- num * _mainsys->attributes_num *
- sizeof(value_type))) == NULL)
- ERROR(3);
- return num;
-}
-
-
-int BestRulesForClass(value_type ** rules, setO set, setA P, setA Q,
- int matrix_type)
-{
- int n, attr, obj, red, num = 0; /* total number of rules */
- int size = _mainsys->setAsize;
- setA fewred = NULL, /* selected reducts */
- allred = NULL; /* all reducts */
- value_type *rule = NULL; /* single rule */
-
- *rules = NULL;
- if (!MatExist(_mainsys, MATA))
- ERROR(5);
- rule =
- (value_type *) malloc(_mainsys->attributes_num * sizeof(value_type));
- if (rule == NULL)
- ERROR(3);
- for (obj = 0; obj < _mainsys->objects_num; obj++)
- if (ContSetO(set, obj))
- {
- if (InitXforObject(_mainsys, obj, P, Q, matrix_type) < 0)
- {
- free(rule);
- return (-_rerror);
- }
- else if (!MatExist(_mainsys, MATX))
- continue;
- n = Red(&allred, MATX);
- CloseMat(_mainsys, MATX);
- if (n > 0)
- {
- n = SelectAllShort(&fewred, allred, n);
- free(allred);
- }
- else
- {
- free(rule);
- return (-_rerror);
- }
- if ((*rules = (value_type *) realloc
- (*rules,
- (n +
- num) * _mainsys->attributes_num * sizeof(value_type))) ==
- NULL)
- {
- free(rule);
- free(fewred);
- return (-_rerror);
- }
- for (red = 0; red < n; red++)
- {
- for (attr = _mainsys->attributes_num - 1; attr >= 0; attr--)
- if (ContSetA(fewred + red * size, attr) ||
- ContSetA(Q, attr))
- rule[attr] = GetA(obj, attr);
- else
- rule[attr] = MINUS;
- AddRule(*rules, &num, rule);
- }
- }
- if (n > 0)
- free(fewred);
- free(rule);
- if (SelectRules(rules, &num, set, P, BESTOPT) < 0)
- return (-_rerror);
- if ((*rules = (value_type *) realloc
- (*rules,
- num * _mainsys->attributes_num * sizeof(value_type))) == NULL)
- ERROR(3);
- return num;
-}
-
-
-int Rules(value_type ** rules, setA P, setA Q, int matrix_type)
-{
- int i, obj, num = 0, /* total number of rules */
- classnum = 0; /* number of rules for class */
- setO processed, /* already covered objects */
- newclass; /* class */
- value_type *rule = NULL, /* single rule */
- *classrules = NULL; /* rules for class */
-
- *rules = (value_type *) malloc(Asize(_mainsys) * sizeof(value_type));
- if (*rules == NULL)
- ERROR(3);
- if (!MatExist(_mainsys, MATA))
- ERROR(5);
- rule =
- (value_type *) malloc(_mainsys->attributes_num * sizeof(value_type));
- if (rule == NULL)
- ERROR(3);
- processed = InitEmptySetO();
- newclass = InitEmptySetO();
- for (obj = 0; obj < _mainsys->objects_num; obj++)
- if (!ContSetO(processed, obj))
- {
- ClassSetO(newclass, obj, Q);
- classnum = 0;
- OrSetO(processed, processed, newclass);
- classnum =
- RulesForClass(&classrules, newclass, P, Q, matrix_type);
- for (i = 0; i < classnum; i++)
- AddRule(*rules, &num,
- classrules + i * _mainsys->attributes_num);
- if (classnum > 0)
- free(classrules);
- classrules = NULL;
- }
- free(rule);
- CloseSetO(processed);
- CloseSetO(newclass);
- if ((*rules = (value_type *) realloc
- (*rules,
- num * _mainsys->attributes_num * sizeof(value_type))) == NULL)
- ERROR(3);
- return num;
-}
-
-
-int RulesForClass(value_type ** rules, setO set, setA P, setA Q,
- int matrix_type)
-{
- int j, n, obj, red, num = 0; /* total number of rules */
- int size = _mainsys->setAsize;
- setA fewred = NULL, /* selected reducts */
- allred = NULL; /* all reducts */
- value_type *rule = NULL; /* single rule */
-
- *rules = NULL;
- if (!MatExist(_mainsys, MATA))
- ERROR(5);
- rule =
- (value_type *) malloc(_mainsys->attributes_num * sizeof(value_type));
- if (rule == NULL)
- ERROR(3);
- for (obj = 0; obj < _mainsys->objects_num; obj++)
- if (ContSetO(set, obj))
- {
- if (InitXforObject(_mainsys, obj, P, Q, matrix_type) < 0)
- {
- free(rule);
- return (-_rerror);
- }
- else if (!MatExist(_mainsys, MATX))
- continue;
- n = Red(&allred, MATX);
- CloseMat(_mainsys, MATX);
- if (n > 0)
- {
- n = SelectAllShort(&fewred, allred, n);
- free(allred);
- }
- else
- {
- free(rule);
- return (-_rerror);
- }
- if ((*rules = (value_type *) realloc
- (*rules,
- (n +
- num) * _mainsys->attributes_num * sizeof(value_type))) ==
- NULL)
- {
- free(rule);
- free(fewred);
- return (-_rerror);
- }
- for (red = 0; red < n; red++)
- {
- for (j = _mainsys->attributes_num - 1; j >= 0; j--)
- if (ContSetA(fewred + red * size, j) || ContSetA(Q, j))
- rule[j] = GetA(obj, j);
- else
- rule[j] = MINUS;
- AddRule(*rules, &num, rule);
- }
- }
- if (n > 0)
- free(fewred);
- free(rule);
- if (SelectRules(rules, &num, set, P, FASTOPT) < 0)
- return (-_rerror);
- if ((*rules = (value_type *) realloc
- (*rules,
- num * _mainsys->attributes_num * sizeof(value_type))) == NULL)
- ERROR(3);
- return num;
-}
-
-
-int FastRules(value_type ** rules, setA P, setA Q, int matrix_type)
-{
- int obj, attr, n, red, count = 0;
- int size = _mainsys->setAsize;
- setA reducts = NULL;
- value_type *rule = NULL;
-
- *rules = (value_type *) malloc(Asize(_mainsys) * sizeof(value_type));
- if (*rules == NULL)
- ERROR(3);
- if (!MatExist(_mainsys, MATA))
- ERROR(5);
- rule =
- (value_type *) malloc(_mainsys->attributes_num * sizeof(value_type));
- if (rule == NULL)
- ERROR(3);
- for (obj = 0; obj < _mainsys->objects_num; obj++)
- {
- if (InitXforObject(_mainsys, obj, P, Q, matrix_type) < 0)
- {
- free(rule);
- return (-_rerror);
- }
- else if (!MatExist(_mainsys, MATX))
- continue;
- n = Red(&reducts, MATX);
- CloseMat(_mainsys, MATX);
- red = SelectOneShort(reducts, n);
- for (attr = _mainsys->attributes_num - 1; attr >= 0; attr--)
- if (ContSetA(reducts + red * size, attr) || ContSetA(Q, attr))
- rule[attr] = GetA(obj, attr);
- else
- rule[attr] = MINUS;
- AddRule(*rules, &count, rule);
- if (n > 0)
- free(reducts);
- reducts = NULL;
- }
- free(rule);
- if ((*rules = (value_type *) realloc
- (*rules,
- count * _mainsys->attributes_num * sizeof(value_type))) == NULL)
- ERROR(3);
- return count;
-}
-
-
-int VeryFastRules(value_type ** rules, setA P, setA Q, int matrix_type)
-{
- int obj, attr, count = 0;
- setA reduct;
- value_type *rule = NULL;
-
- *rules = (value_type *) malloc(Asize(_mainsys) * sizeof(value_type));
- if (*rules == NULL)
- ERROR(3);
- if (!MatExist(_mainsys, MATA))
- ERROR(5);
- rule =
- (value_type *) malloc(_mainsys->attributes_num * sizeof(value_type));
- if (rule == NULL)
- ERROR(3);
- reduct = InitEmptySetA();
- for (obj = 0; obj < _mainsys->objects_num; obj++)
- {
- if (InitXforObject(_mainsys, obj, P, Q, matrix_type) < 0)
- {
- free(rule);
- return (-_rerror);
- }
- else if (!MatExist(_mainsys, MATX))
- continue;
- RedOptim(reduct, MATX);
- CloseMat(_mainsys, MATX);
- for (attr = _mainsys->attributes_num - 1; attr >= 0; attr--)
- if (ContSetA(reduct, attr) || ContSetA(Q, attr))
- rule[attr] = GetA(obj, attr);
- else
- rule[attr] = MINUS;
- AddRule(*rules, &count, rule);
- }
- free(rule);
- CloseSetA(reduct);
- if ((*rules = (value_type *) realloc
- (*rules,
- count * _mainsys->attributes_num * sizeof(value_type))) == NULL)
- ERROR(3);
- return count;
-}
-
-
-int ApprRules(value_type ** rules, setA P, setA Q, int option,
- int matrix_type)
-{
- int i, obj, num = 0, /* total number of rules */
- classnum = 0; /* number of rules for class */
- setO processed, /* already covered objects */
- newclass; /* class */
- value_type *rule = NULL, /* single rule */
- *classrules = NULL; /* rules for class */
-
- *rules = (value_type *) malloc(Asize(_mainsys) * sizeof(value_type));
- if (*rules == NULL)
- ERROR(3);
- if (!MatExist(_mainsys, MATA))
- ERROR(5);
- rule =
- (value_type *) malloc(_mainsys->attributes_num * sizeof(value_type));
- if (rule == NULL)
- ERROR(3);
- processed = InitEmptySetO();
- newclass = InitEmptySetO();
- for (obj = 0; obj < _mainsys->objects_num; obj++)
- if (!ContSetO(processed, obj))
- {
- ClassSetO(newclass, obj, Q);
- classnum = 0;
- OrSetO(processed, processed, newclass);
- classnum = ApprRulesForClass(&classrules, newclass, P, Q,
- option, matrix_type);
- for (i = 0; i < classnum; i++)
- AddRule(*rules, &num,
- classrules + i * _mainsys->attributes_num);
- if (classnum > 0)
- free(classrules);
- classrules = NULL;
- }
- free(rule);
- CloseSetO(processed);
- CloseSetO(newclass);
- if ((*rules = (value_type *) realloc
- (*rules,
- num * _mainsys->attributes_num * sizeof(value_type))) == NULL)
- ERROR(3);
- return num;
-}
-
-
-
-int ApprRulesForClass(value_type ** rules, setO set, setA P, setA Q,
- int option, int matrix_type)
-{
- int j, n, obj, red, num = 0; /* total number of rules */
- int size = _mainsys->setAsize;
- setA fewred = NULL, /* selected reducts */
- allred = NULL; /* all reducts */
- value_type *rule = NULL; /* single rule */
- setO aclass;
-
- *rules = NULL;
- if (!MatExist(_mainsys, MATA))
- ERROR(5);
- rule =
- (value_type *) malloc(_mainsys->attributes_num * sizeof(value_type));
- if (rule == NULL)
- ERROR(3);
- aclass = InitEmptySetO();
- if (option == LOWER)
- LowAppr(aclass, set, P, matrix_type);
- else if (option == UPPER)
- UppAppr(aclass, set, P, matrix_type);
- else
- CopySetO(aclass, set);
- for (obj = 0; obj < _mainsys->objects_num; obj++)
- if (ContSetO(aclass, obj))
- {
- if (InitXforObjectFromClass(_mainsys, obj, P, aclass, matrix_type)
- < 0)
- {
- free(rule);
- return (-_rerror);
- }
- else if (!MatExist(_mainsys, MATX))
- continue;
- n = Red(&allred, MATX);
- CloseMat(_mainsys, MATX);
- if (n > 0)
- {
- n = SelectAllShort(&fewred, allred, n);
- free(allred);
- }
- else
- {
- free(rule);
- return (-_rerror);
- }
- if ((*rules = (value_type *) realloc
- (*rules,
- (n +
- num) * _mainsys->attributes_num * sizeof(value_type))) ==
- NULL)
- {
- free(rule);
- free(fewred);
- return (-_rerror);
- }
- for (red = 0; red < n; red++)
- {
- for (j = _mainsys->attributes_num - 1; j >= 0; j--)
- if (ContSetA(fewred + red * size, j) || ContSetA(Q, j))
- rule[j] = GetA(obj, j);
- else
- rule[j] = MINUS;
- AddRule(*rules, &num, rule);
- }
- }
- if (n > 0)
- free(fewred);
- free(rule);
- if (SelectRules(rules, &num, set, P, FASTOPT) < 0)
- return (-_rerror);
- if ((*rules = (value_type *) realloc
- (*rules,
- num * _mainsys->attributes_num * sizeof(value_type))) == NULL)
- ERROR(3);
- return num;
-}
Deleted: grass-addons/grass6/raster/mcda/r.roughset/rule2.h
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/rule2.h 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/rule2.h 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,110 +0,0 @@
-
-/****************************************************************************
- *
- * MODULE: r.roughset
- * AUTHOR(S): GRASS module authors ad Rough Set Library (RSL) maintain:
- * G.Massei (g_massa at libero.it)-A.Boggia (boggia at unipg.it)
- * Rough Set Library (RSL) ver. 2 original develop:
- * M.Gawrys - J.Sienkiewicz
- *
- * PURPOSE: Geographics rough set analisys and knowledge discovery
- *
- * COPYRIGHT: (C) GRASS Development Team (2008)
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************/
-
-/*** ***/
-
-/*** SOME MORE QUERIES FOR SYSTEM ***/
-
-/*** ( FINDING RULES ) ***/
-
-/*** ***/
-
-/*** part of the RSL system written by M.Gawrys J.Sienkiewicz ***/
-
-/*** ***/
-
-/*****************************************************************************/
-
-#define BESTOPT 0
-#define FASTOPT 1
-
-#define NORMAL 0
-#define LOWER 1
-#define UPPER 2
-
-int AllRules(value_type ** rules, setA P, setA Q, int matrix_type);
-
- /* finds all possible rules for condition attributes P */
- /* and decision Q, allocates memory, returns number of rules */
-
-int AllRulesForReducts(value_type ** rules, cluster_type * reducts,
- int N, setA Q, int matrix_type);
- /* finds all possible rules for each reduct separatly */
- /* allocates memory, returns number of rules */
-
-int SelectRules(value_type ** rules, int *N, setO set, setA P, int option);
-
- /* reduce set of rules to cover only some objects */
- /* on attributes P, reallocates memory and decrease N */
- /* option: FASTOPT for shortcomings */
- /* BESTOPT for optimal computing */
-
-int BestRules(value_type ** rules, setA P, setA Q, int matrix_type);
-
- /* finds minimal set of rules, allocates memory */
- /* P - condition attributes; Q - decision attributes */
- /* returns number of rules */
-
-int BestRulesForClass(value_type ** rules, setO set, setA P, setA Q,
- int matrix_type);
- /* finds minimal set of rules to cover objects from set */
- /* P - condition attributes; Q - decision attributes */
- /* allocates memory, returns number of rules */
-
-int Rules(value_type ** rules, setA P, setA Q, int matrix_type);
-
- /* finds set of rules, allocates memory */
- /* P - condition attributes; Q - decision attributes */
- /* returns number of rules */
-
-int RulesForClass(value_type ** rules, setO set, setA P, setA Q,
- int matrix_type);
- /* finds set of rules to cover objects from set */
- /* P - condition attributes; Q - decision attributes */
- /* allocates memory, returns number of rules */
-
-int FastRules(value_type ** rules, setA P, setA Q, int matrix_type);
-
- /* finds quickly set of rules, allocates memory */
- /* P - condition attributes; Q - decision attributes */
- /* returns number of rules */
-
-int VeryFastRules(value_type ** rules, setA P, setA Q, int matrix_type);
-
- /* finds very quickly set of rules, allocates memory */
- /* P - condition attributes; Q - decision attributes */
- /* returns number of rules */
-
-int ApprRules(value_type ** rules, setA P, setA Q, int option,
- int matrix_type);
- /* finds set of rules for approximated classes */
- /* P - condition attributes; Q - decision attributes */
- /* option: LOWER - lower approximation - certain rules */
- /* UPPER - upper approximation - possible rules */
- /* NORMAL - no approximation - normal rules */
- /* allocates memory, returns number of rules */
-
-int ApprRulesForClass(value_type ** rules, setO set, setA P, setA Q,
- int option, int matrix_type);
- /* finds set of rules for approximated class (set) */
- /* P - condition attributes; Q - decision attributes */
- /* option: LOWER - lower approximation - certain rules */
- /* UPPER - upper approximation - possible rules */
- /* NORMAL - no approximation - normal rules */
- /* allocates memory, returns number of rules */
Deleted: grass-addons/grass6/raster/mcda/r.roughset/rules_extr.c
===================================================================
--- grass-addons/grass6/raster/mcda/r.roughset/rules_extr.c 2012-12-01 17:10:08 UTC (rev 54123)
+++ grass-addons/grass6/raster/mcda/r.roughset/rules_extr.c 2012-12-01 17:11:28 UTC (rev 54124)
@@ -1,489 +0,0 @@
-
-/****************************************************************************
- *
- * MODULE: r.roughset
- * AUTHOR(S): GRASS module authors ad Rough Set Library (RSL) maintain:
- * G.Massei (g_massa at libero.it)-A.Boggia (boggia at unipg.it)
- * Rough Set Library (RSL) ver. 2 original develop:
- * M.Gawrys - J.Sienkiewicz
- *
- * PURPOSE: Geographics rough set analisys and knowledge discovery
- *
- * COPYRIGHT: (C) A.Boggia - G.Massei (2008)
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
-/************************************************************************
-** EXTRACT RULE FROM GEOGRAPHICS THEMES (Based on Rough Set Library
-** written by M.Gawrys J.Sienkiewiczbrary )
-**
-** The RSL defines three types to be used in applications:
-** setA - set of attributes,
-** setO - set of objects and
-** SYSTEM - information system descriptor.
-
-** The descriptor contains pointers to the information system data matrices:
-** - MATRIX A, is the attribute-value table.
-** - MATRIX D, is the discernibility matrix
-** - MATRIX X, is called a reduced discernibility matrix.
-
-/***********************************************************************/
-
-#include "rough.h"
-#include "localproto.h"
-
-int rough_analysis(int nrows, int ncols, char *name, int *classify_vect,
- struct input *attributes, char *file_sample_txt, int strgy,
- int cls);
-
-void rough_set_library_out(int nrows, int ncols, int nattributes,
- struct input *attributes, char *file_out_sys);
-
-void output_to_txt(FILE * file_out_txt, value_type * rules, setA P, setA Q,
- setA core, setA beg, int n, SYSTEM * sys1, int strgy,
- int r, int *opr, struct input *attributes);
-
-void fPrintSetA(FILE * file, setA set);
-void fPrintSetO(FILE * file, setO set);
-void fPrintRules(FILE * file, value_type * rules, int N, int *opr, setA P,
- setA Q, struct input *attributes);
-
-float MeanAttrInRule(value_type * rules, int N, setA P);
-
-int LowRules(value_type ** rules, setA P, setA Q, int mat);
-int UppRules(value_type ** rules, setA P, setA Q, int mat);
-int NormRules(value_type ** rules, setA P, setA Q, int mat);
-
-
-int rough_analysis(int nrows, int ncols, char *name, int *classify_vect,
- struct input *attributes, char *file_sample_txt, int strgy,
- int cls)
-{
- SYSTEM *sys1, *sys2; /* Information system descriptor structures. */
-
- /* It contains information about the system parameters (number of objects, number of attributes, system name. */
- value_type value, *buf, *rules; /* stores a single value of attribute (used for attribute-value table and rule implementation) */
- char c;
- int n, j, i, r, *opr;
- setA beg, P, Q, full, core; /*set of attributes */
- setO train; /*set of object */
- FILE *file_out_txt; /* pointer to text output file */
- int (*genrules) (value_type **, setA, setA, int);
-
- int nattributes, nobjects = nrows * ncols; /*objects in information system are all raster cells in working location with a defined resolution */
- int row, col, object, attribute; /*index and counter */
-
- sys1 = InitEmptySys(); /* Allocates memory for a system descriptor and returns a pointer. */
-
- if (file_sample_txt != NULL) /*use sample txt file if input in dec_txt->answer isn't NUL */
- {
- name = file_sample_txt;
- G_message("Using %s sys file for rules generation", name);
- } /* Imports a system from a file of the special format. */
-
-
- FileToSys(sys1, name); /* Imports a system from a file of the special format. */
-
- if (_rerror > 0)
- {
- G_fatal_error(" Can't open data file \n");
- return (1);
- }
-
- strcat(name, ".out");
-
- if (!(file_out_txt = fopen(name, "a"))) /*output text file */
- {
- G_fatal_error(" Can't open output file \n");
- return (1);
- }
-
- UseSys(sys1); /* Activates a system. All routines will work on this indicated system data and parameters. */
-
- if (_rerror > 0)
- {
- G_fatal_error("Can't open information system <%s>\n", sys1->name);
- return (1);
- }
-
-
- full = InitFullSetA(); /*Initialize a full set. Allocates memory for a set and initialize it with all elements of
- domain based on the active information system */
-
- InitD(sys1); /*Generates MATRIX D from MATRIX A.Connected to sys and filled */
-
- P = InitEmptySetA(); /* Initialize an empty set. Memory size determined by active information system parameters */
- Q = InitEmptySetA();
-
- nattributes = (AttributesNum(sys1) - 1);
-
- /* define attribute */
- for (i = 0; i < nattributes; i++)
- {
- AddSetA(P, i); /* Adds a single element to a set */
- }
-
- /* define decision */
- AddSetA(Q, (AttributesNum(sys1) - 1));
-
- InitX(sys1, P, Q, MATD); /*Generates MATRIX X from another matrix designed for use in core and reducts queries. */
- core = InitEmptySetA();
- Core(core, MATX); /* Puts a core of the active information system to core. */
-
- RedOptim(core, MATX); /* Provides the optimized heuristic search for a single reduct */
-
- CloseSetA(core); /* Frees memory allocated for a set */
- n = RedFew(&beg, MATX); /*Finds all reducts shorter than the first one found. */
- CloseMat(sys1, MATX); /* Closes a matrix. */
-
- if (n > 0)
- free(beg);
-
- switch (strgy)
- {
- case 0:
- genrules = VeryFastRules;
- break;
- case 1:
- genrules = FastRules;
- break;
- case 2:
- genrules = Rules;
- break;
- case 3:
- genrules = BestRules;
- break;
- case 4:
- genrules = AllRules;
- break;
- case 5:
- genrules = LowRules;
- break;
- case 6:
- genrules = UppRules;
- break;
- default:
- genrules = NormRules;
- break;
- }
-
- r = genrules(&rules, P, Q, MATD); /* rules generator */
-
- if (r > 0)
- {
- opr = StrengthOfRules(rules, r);
- } /* Creates a table of rules strengths */
-
-
- /**************************Output text files************************************/
-
- /***********print output about sys1 in a txt file (file_out_txt)****************/
- output_to_txt(file_out_txt, rules, P, Q, core, beg, n, sys1, strgy, r,
- opr, attributes);
-
- /**************************close all********************************************/
-
- //CloseSys(sys1); /* close sys1 */
-
- /*******************************************************************************/
-
- /**************************Classify*********************************************/
-
- sys2 = InitEmptySys();
- SetParameters(sys2, nobjects, nattributes); /* assigning system parameters */
- ConnectA(sys2, malloc(MatMemSize(sys2, MATA))); /* Connects MATRIX A to a system descriptor. */
- /*MatMemSize: Returns size of memory used by matrix. */
- SetName(sys2, "classys");
- UseSys(sys2); /* active system sys2 was created in application and has only MATRIX A */
-
- if (_rerror > 0)
- {
- G_fatal_error("Can't open information system <%s>\n", _mainsys->name);
- return (1);
- }
-
- G_message("Build information system for classification ");
- for (i = 0; i < nattributes; i++)
- {
- object = 0; /* set object numbers =0 and increase it until rows*cells for each attribute */
- for (row = 0; row < nrows; row++)
- {
- G_percent(row, nrows, 1);
- /* Reads appropriate information into the buffer buf associated with the requested row */
- G_get_c_raster_row(attributes[i].fd, attributes[i].buf, row);
- for (col = 0; col < ncols; col++)
- {
- value = (attributes[i].buf[col]); /*make a cast on the DCELL output value */
- PutA(_mainsys, object, i, value); /* filling MATRIX A */
- object++;
- }
- }
- }
-
- buf = MatExist(_mainsys, MATA); /*Returns pointer to specified matrix if exists */
-
- if (!buf)
- {
- G_fatal_error("Error in the information system <%s>\n",
- _mainsys->name);
- return (1);
- }
-
-
- switch (cls)
- {
- case 0:
- {
- for (j = 0; j < _mainsys->objects_num; j++) /*Chooses the best rule to cover sample. Strategy no. 1 */
- {
- classify_vect[j] =
- Classify1(buf + j * _mainsys->attributes_num, rules, r, P,
- Q);
- G_percent(j, _mainsys->objects_num, 1);
- }
- }
- break;
- case 1:
- {
- for (j = 0; j < _mainsys->objects_num; j++) /*Chooses the best rule to cover sample. Strategy no. 2 */
- {
- classify_vect[j] =
- Classify2(buf + j * _mainsys->attributes_num, rules, r, P,
- Q);
- G_percent(j, _mainsys->objects_num, 1);
- }
- }
- break;
- case 2:
- {
- for (j = 0; j < _mainsys->objects_num; j++) /*Chooses the best rule to cover sample. Strategy no. 3 */
- {
- classify_vect[j] =
- Classify3(buf + j * _mainsys->attributes_num, rules, r,
- opr, P, Q);
- G_percent(j, _mainsys->objects_num, 1);
- }
- }
- break;
-
- default:
- 0;
- break;
- }
-
-
- G_message("All cells classified (%d)", j);
-
- /*****************************************************************************/
-
- free(rules);
- free(opr);
- CloseSetA(P);
- CloseSetA(Q);
- CloseSetA(full);
- CloseSys(sys2);
- //fclose(file);
- fclose(file_out_txt);
- return (0);
-}
-
-void rough_set_library_out(int nrows, int ncols, int nattribute,
- struct input *attributes, char *file_out_sys)
-{
- int row, col, i, j;
- int value, decvalue;
- int nobject;
- char cell_buf[300];
- FILE *fp; /*file pointer for ASCII output */
-
- /* open *.sys file for writing or use stdout */
- if (NULL == (fp = fopen(file_out_sys, "w")))
- G_fatal_error("Not able to open file [%s]", file_out_sys);
-
- fprintf(fp, "NAME: %s\nATTRIBUTES: %d\nOBJECTS: %s\n", file_out_sys,
- nattribute + 1, " ");
-
- /************** process the data *************/
-
- G_message("Build information system for rules extraction in %s",
- file_out_sys);
-
- nobject = 0;
-
- for (row = 0; row < nrows; row++)
- {
- for (i = 0; i <= nattribute; i++)
- {
- G_get_c_raster_row(attributes[i].fd, attributes[i].buf, row); /* Reads appropriate information into the buffer buf associated with the requested row */
- }
- for (col = 0; col < ncols; col++) /*make a cast on the DCELL output value */
- {
- decvalue = (int)attributes[nattribute].buf[col];
- if (0 < decvalue) /* TODO: correct form will: decval!=null */
- {
- for (j = 0; j < nattribute; j++) /*make a cast on the DCELL output value */
- {
- value = (int)(attributes[j].buf[col]);
- sprintf(cell_buf, "%d", value);
- G_trim_decimal(cell_buf);
- fprintf(fp, "%s ", cell_buf);
- }
- fprintf(fp, "%d\n", decvalue);
- nobject++;
- }
- }
- G_percent(row, nrows, 1);
- }
-
- /************** write code file*************/
-
- for (i = 0; i <= nattribute; i++)
- {
- fprintf(fp, "\n%s", attributes[i].name);
- }
-
- /************** write header file*************/
-
- rewind(fp); /*move file pointer to header file */
- /* TODO: make a system to detect errors like: G_fatal_error("Not able to write file [%s]",file_out_sys); */
-
- fprintf(fp, "NAME: %s\nATTRIBUTES: %d\nOBJECTS: %d", file_out_sys,
- nattribute + 1, nobject);
-
- /************** close all and exit ***********/
-
- fclose(fp);
-}
-
-
-void output_to_txt(FILE * file_out_txt, value_type * rules, setA P, setA Q,
- setA core, setA beg, int n, SYSTEM * sys1, int strgy,
- int r, int *opr, struct input *attributes)
-{
- int i;
-
- fprintf(file_out_txt, "Condition attributes are\n");
- fPrintSetA(file_out_txt, P);
- fprintf(file_out_txt, "\nDecision attributes are\n");
- fPrintSetA(file_out_txt, Q);
- fprintf(file_out_txt, "\nDependCoef = %f\n", DependCoef(P, Q, MATD)); /* Returns degree of dependency Q from P in the active information system. */
- fprintf(file_out_txt, "CORE = ");
- fPrintSetA(file_out_txt, core);
- fprintf(file_out_txt, "\nRedOptim = ");
- fPrintSetA(file_out_txt, core);
- fprintf(file_out_txt, "\nFew reducts ( %i ):\n", n);
-
- for (i = 0; i < n; i++)
- {
- fPrintSetA(file_out_txt, beg + i * sys1->setAsize);
- fprintf(file_out_txt, "\n");
- }
-
- fprintf(file_out_txt, "%d strategy of generating rules\n", strgy);
-
- if (r > 0)
- {
- fprintf(file_out_txt, "Rules ( %i )\n", r);
- fPrintRules(file_out_txt, rules, r, opr, P, Q, attributes); /*print to file generated rules */
- fprintf(file_out_txt, "Mean number of attributes in rule = %.1f\n",
- MeanAttrInRule(rules, r, P));
- }
-}
-
-
-
-
-void fPrintSetA(FILE * f, setA set)
-{
- int attr;
-
- fprintf(f, "{");
- for (attr = 0; attr < _mainsys->attributes_num; attr++)
- if (ContSetA(set, attr))
- {
- fprintf(f, " %d", attr);
- attr++;
- break;
- }
- for (; attr < _mainsys->attributes_num; attr++)
- if (ContSetA(set, attr))
- fprintf(f, ",%d", attr);
- fprintf(f, " }");
-}
-
-void fPrintSetO(FILE * f, setO set)
-{
- int obj;
-
- fprintf(f, "{");
- for (obj = 0; obj < _mainsys->objects_num; obj++)
- if (ContSetO(set, obj))
- {
- fprintf(f, " %d", obj);
- obj++;
- break;
- }
- for (; obj < _mainsys->objects_num; obj++)
- if (ContSetO(set, obj))
- fprintf(f, ",%d", obj);
- fprintf(f, " }");
-}
-
-void fPrintRules(FILE * file, value_type * rules,
- int N, int *opr, setA P, setA Q, struct input *attributes)
-{
- int n, j;
-
- for (n = 0; n < N; n++)
- {
- for (j = 0; j < _mainsys->attributes_num; j++)
- if (ContSetA(P, j))
- if (rules[n * _mainsys->attributes_num + j] != MINUS)
- fprintf(file, "%s=%d ", attributes[j].name,
- rules[n * _mainsys->attributes_num + j]);
- fprintf(file, " => ");
- for (j = 0; j < _mainsys->attributes_num; j++)
- if (ContSetA(Q, j))
- if ((rules + n * _mainsys->attributes_num)[j] != MINUS)
- fprintf(file, "%s=%d ", attributes[j].name,
- (rules + n * _mainsys->attributes_num)[j]);
- fprintf(file, " ( %i objects )\n", opr[n]);
- }
- return;
-}
-
-
-
-float MeanAttrInRule(value_type * rules, int N, setA P)
-{
- int counter = 0;
- int i, j;
- int size = _mainsys->attributes_num;
-
- for (i = 0; i < N; i++)
- for (j = 0; j < size; j++)
- if (ContSetA(P, j))
- if ((rules + i * size)[j] != MINUS)
- counter++;
- return (float)counter / N;
-}
-
-int LowRules(value_type ** rules, setA P, setA Q, int mat)
-{
- return ApprRules(rules, P, Q, LOWER, mat);
-}
-
-int UppRules(value_type ** rules, setA P, setA Q, int mat)
-{
- return ApprRules(rules, P, Q, UPPER, mat);
-}
-
-int NormRules(value_type ** rules, setA P, setA Q, int mat)
-{
- return ApprRules(rules, P, Q, NORMAL, mat);
-}
-
-
-/* dom 07 dic 2008 07:04:58 CET */
More information about the grass-commit
mailing list