Bajo el título "Extending FuzAtAnalyzer to approach the management of classical negation", hemos mandado un pequeño artículo al congreso CMMSE 2015 (15th International Conference Computational and Mathematical Methods in Science and Engineering) que se celebrará en Rota, del 6 al 10 de Julio (enlace).
Para este artículo, en vez de ser más teóricos, hemos mostrado la herramienta que diseñe en JAVA para aplicar los algoritmos de nuestros artículos y que llamé FuzAtAnalyzer. En particular, hemos publicado la parte que hemos añadido para gestionar Conceptos Formales Mixtos y un ejemplo donde sale un retículo mixto que elabora el propio programa en Latex y del que me siento muy orgulloso de haber implementado, aunque quizás el dibujo quede muy pesado para que el latex lo gestione, pero es que son así de complejos los retículos mixtos.
Mostrando entradas con la etiqueta java. Mostrar todas las entradas
Mostrando entradas con la etiqueta java. Mostrar todas las entradas
viernes, 15 de mayo de 2015
martes, 23 de octubre de 2012
C-Programando para la tesis
Hacía mucho tiempo que ya no programaba y el proyecto que se me había venido a la cabeza tenía dos utilidades: volver a programar para que no se me olvidara e intentar sacar algo para la tesis.
Me he hecho un programita que controla la generación de dependencias funcionales fuzzy y una "base mínima" de dependencias. Llevo dos días sentado comiéndome la cabeza pues cada vez que probaba un ejemplo nuevo petaba. A base de corregir fallos tontos y otras cosas que son fallos garrafales, pues he ido puliéndolo y ya está casi listo para que sea testeado por los jefes.
Lo que el otro día plasmé en 10 folios tras unas cuantas horas haciendo cuentas, ahora el programa lo hace en segundos y de tres formas diferentes según la norma que aplique, por lo que ahorra mucho pero que mucho tiempo.
Lógicamente, el algoritmo no está depurado al máximo ya que me bastaba con que funcionara con una tabla de 10 filas por 10 columnas (y eso además no lo he probado), pero al ver las trazas, se puede observar como funciona la lógica de simplificación de dependencias funcionales fuzzy que envíamos al FOCI 2011 de París.
Lo malo es que para usar el programa habrá que tener buena vista, ya que para que me cupiera todo he reducido la letra a Courier New de 10.
Esperamos (al menos yo lo espero), obtener bastantes resultados y de hecho ya estoy viendo algunas cosas interesantes para pulir.
Por cierto, estar tanto tiempo sentado tiene sus consecuencias y es que esta mañana no andaba ni para atrás mientras entrenaba.
Etiquetas:
2012,
informatica,
java,
matematicas,
programas,
tesis
jueves, 9 de septiembre de 2010
C-JAVA: Clase CeldaCalendario
Esta clase me la fabrique para poder hacerme un calendario donde apuntar diferentes cosas. Es un JPanel dibujado que implementa el MouseListener para que, al pulsar sobre cada celda, realice una accion (en mi caso mostrar un dialogo).
Se le pasa como parametro el año y, segun el mismo, genera un calendario de 12 filas (una por mes) y diversas columnas identificando el dia de cada mes en que dia de la semana cae.
Os paso el codigo por si os resulta interesante y os quereis ahorrar el tecleo. No dudeis en preguntar alguna duda.
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class CeldaCalendario extends JPanel implements MouseListener
{
static final long serialVersionUID=1;
String[][] texto=new String[37][12];//texto a poner en la celda
Color[][] color=new Color[37][12];//color de fondo de la celda
int[] columna=new int[12];
public int anno=0;
Importar importar;//Esta es una clase propia que es otro JPanel con datos que importo, asi que podeis ahorrar o modificar sus alusiones.
public CeldaCalendario(Importar importar)
{
this.importar=importar;
this.addMouseListener(this);
for (int a=0;a<37;a++)
{
for (int b=0;b<12;b++)
{
texto[a][b]="";
color[a][b]=new Color(255,255,200);
}
}
}
public void paint(Graphics g)
{
//pintado de fondo
g.setColor(new Color(255,255,200));
g.fillRect(0,21,667,261);
g.setColor(Color.yellow);
g.fillRect(0,0,667,20);
g.setFont(new Font("Monospaced",0,12));
g.setColor(Color.black);
//dibujo de grid
for (int a=0;a<38;a++)
{
g.drawLine(a*18,0,a*18,260);
}
for (int a=0;a<14;a++)
{
g.drawLine(0,a*20,666,a*20);
}
//dibujo de iniciales dias
String d="LMXJVSD";
for (int a=0;a<37;a++)
{
g.drawString(d.substring(a%7,(a%7)+1),a*18+6,14);
}
for (int a=0;a<37;a++)
{
for (int b=0;b<12;b++)
{
g.setColor(color[a][b]);
g.fillRect(a*18+1,b*20+21,17,19);
g.setColor(Color.black);
g.drawString(texto[a][b],a*18+2,b*20+35);
}
}
}
public void repintar()
{
RepaintManager.currentManager(this).isCompletelyDirty(this);
RepaintManager.currentManager(this).paintDirtyRegions();
}
public void mouseClicked(MouseEvent e)
{
double x,y;
x=e.getPoint().getX();
y=e.getPoint().getY();
marcarPunto((int)x,(int)y);
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void marcarPunto(int x, int y)
{
x=(int)(x/18);
y=(int)(y/20);
String textoauxiliar=texto[x][y-1];
if (textoauxiliar.equalsIgnoreCase(""))
return;
int mes=y;
String fecha=textoauxiliar.replace(' ','0')+"-";
if (mes<10)
fecha+="0";
fecha+=mes+"-";
textoauxiliar=(""+anno).substring(2);
fecha+=textoauxiliar;
importar.mostrarFecha(fecha);//este es el metodo que hace llamada al dialogo con los datos correspondientes a la celda
repaint();
}
}
Para generar e inicializar el JPanel dependiendo del año uso este metodo:
public void generarAnno()
{
int anno=comboAnno.getSelectedIndex()+2006;//vale con poner un año de 4 digitos
cc.anno=anno;//cc es el nombre del CeldaCalendario
int dias=365;
if (anno%4==0) dias++;
GregorianCalendar calendario=new GregorianCalendar(anno-1,11,31);
for (int a=0;a<37;a++)
{
for (int b=0;b<12;b++)
{
cc.texto[a][b]="";
cc.color[a][b]=new Color(255,255,0);
}
}
int columna=0;
//pintarTabla
for (int d=0;d
{
calendario.add(GregorianCalendar.DATE,1);
if (calendario.get(GregorianCalendar.DATE)==1)
{
columna=(calendario.get(GregorianCalendar.DAY_OF_WEEK)+5)%7;
cc.columna[calendario.get(GregorianCalendar.MONTH)]=columna;
}
if (calendario.get(GregorianCalendar.DAY_OF_WEEK)==1 || calendario.get(GregorianCalendar.DAY_OF_WEEK)==7)
{
cc.color[columna+calendario.get(GregorianCalendar.DATE)-1][calendario.get(GregorianCalendar.MONTH)]=Color.red;
}
else
{
cc.color[columna+calendario.get(GregorianCalendar.DATE)-1][calendario.get(GregorianCalendar.MONTH)]=Color.white;
}
if (calendario.get(GregorianCalendar.DATE)<10)
cc.texto[columna+calendario.get(GregorianCalendar.DATE)-1][calendario.get(GregorianCalendar.MONTH)]=" "+calendario.get(GregorianCalendar.DATE);
else
cc.texto[columna+calendario.get(GregorianCalendar.DATE)-1][calendario.get(GregorianCalendar.MONTH)]=""+calendario.get(GregorianCalendar.DATE);
}
//aqui se asignan los colores segun los datos obtenidos
for (int d=0;d
{
DatosVacas da=(DatosVacas)vDatos6.elementAt(d);
if (da.fecha.get(GregorianCalendar.YEAR)==anno)
{
if (da.fechaH.get(GregorianCalendar.YEAR)==2001)
cc.color[cc.columna[da.fecha.get(GregorianCalendar.MONTH)]+da.fecha.get(GregorianCalendar.DATE)-1][da.fecha.get(GregorianCalendar.MONTH)]=Color.green;
else
{
GregorianCalendar fechaPoner=(GregorianCalendar)da.fecha.clone();
while (-1
{
if (fechaPoner.get(GregorianCalendar.DAY_OF_WEEK)!=1 && fechaPoner.get(GregorianCalendar.DAY_OF_WEEK)!=7)
{//para que no ponga vacaciones en sabado o domingo
cc.color[cc.columna[fechaPoner.get(GregorianCalendar.MONTH)]+fechaPoner.get(GregorianCalendar.DATE)-1][fechaPoner.get(GregorianCalendar.MONTH)]=Color.green;
}
fechaPoner.add(GregorianCalendar.DATE,1);
}
}
}
}
cc.repintar();
cc.repaint();
}
Se le pasa como parametro el año y, segun el mismo, genera un calendario de 12 filas (una por mes) y diversas columnas identificando el dia de cada mes en que dia de la semana cae.
Os paso el codigo por si os resulta interesante y os quereis ahorrar el tecleo. No dudeis en preguntar alguna duda.
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class CeldaCalendario extends JPanel implements MouseListener
{
static final long serialVersionUID=1;
String[][] texto=new String[37][12];//texto a poner en la celda
Color[][] color=new Color[37][12];//color de fondo de la celda
int[] columna=new int[12];
public int anno=0;
Importar importar;//Esta es una clase propia que es otro JPanel con datos que importo, asi que podeis ahorrar o modificar sus alusiones.
public CeldaCalendario(Importar importar)
{
this.importar=importar;
this.addMouseListener(this);
for (int a=0;a<37;a++)
{
for (int b=0;b<12;b++)
{
texto[a][b]="";
color[a][b]=new Color(255,255,200);
}
}
}
public void paint(Graphics g)
{
//pintado de fondo
g.setColor(new Color(255,255,200));
g.fillRect(0,21,667,261);
g.setColor(Color.yellow);
g.fillRect(0,0,667,20);
g.setFont(new Font("Monospaced",0,12));
g.setColor(Color.black);
//dibujo de grid
for (int a=0;a<38;a++)
{
g.drawLine(a*18,0,a*18,260);
}
for (int a=0;a<14;a++)
{
g.drawLine(0,a*20,666,a*20);
}
//dibujo de iniciales dias
String d="LMXJVSD";
for (int a=0;a<37;a++)
{
g.drawString(d.substring(a%7,(a%7)+1),a*18+6,14);
}
for (int a=0;a<37;a++)
{
for (int b=0;b<12;b++)
{
g.setColor(color[a][b]);
g.fillRect(a*18+1,b*20+21,17,19);
g.setColor(Color.black);
g.drawString(texto[a][b],a*18+2,b*20+35);
}
}
}
public void repintar()
{
RepaintManager.currentManager(this).isCompletelyDirty(this);
RepaintManager.currentManager(this).paintDirtyRegions();
}
public void mouseClicked(MouseEvent e)
{
double x,y;
x=e.getPoint().getX();
y=e.getPoint().getY();
marcarPunto((int)x,(int)y);
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void marcarPunto(int x, int y)
{
x=(int)(x/18);
y=(int)(y/20);
String textoauxiliar=texto[x][y-1];
if (textoauxiliar.equalsIgnoreCase(""))
return;
int mes=y;
String fecha=textoauxiliar.replace(' ','0')+"-";
if (mes<10)
fecha+="0";
fecha+=mes+"-";
textoauxiliar=(""+anno).substring(2);
fecha+=textoauxiliar;
importar.mostrarFecha(fecha);//este es el metodo que hace llamada al dialogo con los datos correspondientes a la celda
repaint();
}
}
Para generar e inicializar el JPanel dependiendo del año uso este metodo:
public void generarAnno()
{
int anno=comboAnno.getSelectedIndex()+2006;//vale con poner un año de 4 digitos
cc.anno=anno;//cc es el nombre del CeldaCalendario
int dias=365;
if (anno%4==0) dias++;
GregorianCalendar calendario=new GregorianCalendar(anno-1,11,31);
for (int a=0;a<37;a++)
{
for (int b=0;b<12;b++)
{
cc.texto[a][b]="";
cc.color[a][b]=new Color(255,255,0);
}
}
int columna=0;
//pintarTabla
for (int d=0;d
{
calendario.add(GregorianCalendar.DATE,1);
if (calendario.get(GregorianCalendar.DATE)==1)
{
columna=(calendario.get(GregorianCalendar.DAY_OF_WEEK)+5)%7;
cc.columna[calendario.get(GregorianCalendar.MONTH)]=columna;
}
if (calendario.get(GregorianCalendar.DAY_OF_WEEK)==1 || calendario.get(GregorianCalendar.DAY_OF_WEEK)==7)
{
cc.color[columna+calendario.get(GregorianCalendar.DATE)-1][calendario.get(GregorianCalendar.MONTH)]=Color.red;
}
else
{
cc.color[columna+calendario.get(GregorianCalendar.DATE)-1][calendario.get(GregorianCalendar.MONTH)]=Color.white;
}
if (calendario.get(GregorianCalendar.DATE)<10)
cc.texto[columna+calendario.get(GregorianCalendar.DATE)-1][calendario.get(GregorianCalendar.MONTH)]=" "+calendario.get(GregorianCalendar.DATE);
else
cc.texto[columna+calendario.get(GregorianCalendar.DATE)-1][calendario.get(GregorianCalendar.MONTH)]=""+calendario.get(GregorianCalendar.DATE);
}
//aqui se asignan los colores segun los datos obtenidos
for (int d=0;d
{
DatosVacas da=(DatosVacas)vDatos6.elementAt(d);
if (da.fecha.get(GregorianCalendar.YEAR)==anno)
{
if (da.fechaH.get(GregorianCalendar.YEAR)==2001)
cc.color[cc.columna[da.fecha.get(GregorianCalendar.MONTH)]+da.fecha.get(GregorianCalendar.DATE)-1][da.fecha.get(GregorianCalendar.MONTH)]=Color.green;
else
{
GregorianCalendar fechaPoner=(GregorianCalendar)da.fecha.clone();
while (-1
{
if (fechaPoner.get(GregorianCalendar.DAY_OF_WEEK)!=1 && fechaPoner.get(GregorianCalendar.DAY_OF_WEEK)!=7)
{//para que no ponga vacaciones en sabado o domingo
cc.color[cc.columna[fechaPoner.get(GregorianCalendar.MONTH)]+fechaPoner.get(GregorianCalendar.DATE)-1][fechaPoner.get(GregorianCalendar.MONTH)]=Color.green;
}
fechaPoner.add(GregorianCalendar.DATE,1);
}
}
}
}
cc.repintar();
cc.repaint();
}
Suscribirse a:
Entradas (Atom)
