mps.c

来自「MSVM」· C语言 代码 · 共 135 行

C
135
字号
#include <stdio.h>#include <math.h>#include <stdlib.h>long ind1, ind2, ind3, ind4, class1, class2, ind_pattern;double partiel;void gener_NAME(FILE *fdes){fprintf(fdes, "NAME          all\n");}long indice_tampon(long parametre) {long valeur_long;valeur_long = (long) floor(log10((double) parametre));return valeur_long;}void gener_ROWS(FILE *fdes, long nb_cat){fprintf(fdes, "ROWS\n");fprintf(fdes, " N  OBJ\n");for(ind1=1; ind1<nb_cat; ind1++)  fprintf(fdes, " E  CONST%1d\n", ind1);}void gener_COLUMNS(FILE *fdes, long nb_cat, long *y, double **gradient,long chunk_size, long *table_chunk, char *tampon[6]){fprintf(fdes, "COLUMNS\n");for(ind1=1; ind1<=chunk_size; ind1++)  {  ind_pattern = table_chunk[ind1];  class1 = y[ind_pattern];  for(ind2=1; ind2<=nb_cat; ind2++)    if(ind2 != class1)      {      if(gradient[ind1][ind2] >= 0.0)        fprintf(fdes, "    A0%s%d  OBJ       %.6E\n",        tampon[indice_tampon(nb_cat*(ind1-1)+ind2)], 	(nb_cat*(ind1-1)+ind2), gradient[ind1][ind2]);      else        fprintf(fdes, "    A0%s%d  OBJ       %.5E\n",        tampon[indice_tampon(nb_cat*(ind1-1)+ind2)], 	(nb_cat*(ind1-1)+ind2), gradient[ind1][ind2]);      for(ind3=1; ind3<nb_cat; ind3++)        {        partiel = 0.0;        if((class1 == ind3) && (ind2 != ind3))          partiel = -1.0;        if((class1 != ind3) && (ind2 == ind3))          partiel = 1.0;        fprintf(fdes, "    A0%s%d  CONST%1d    %lf\n",        tampon[indice_tampon(nb_cat*(ind1-1)+ind2)], 	(nb_cat*(ind1-1)+ind2), ind3, partiel);        }      }  }}void gener_RHS(FILE *fc, long Q, long *y, long nb_data, long *in_chunk, double **alpha){double partiel;fprintf(fc, "RHS\n");for(ind2=1; ind2<Q; ind2++)  {  partiel = 0.0;  for(ind1=1; ind1<=nb_data; ind1++)    if(in_chunk[ind1] == 0)      {      class1 = y[ind1];      for(ind3=1; ind3<=Q; ind3++)        {         if((class1 == ind2) && (ind3 != ind2))          partiel += alpha[ind1][ind3];        if((class1 != ind2) && (ind3 == ind2))          partiel -= alpha[ind1][ind3];        }      }  if(partiel >= 0.0)    fprintf(fc, "    B         CONST%1d    %.6E\n", ind2, partiel);  else    fprintf(fc, "    B         CONST%1d    %.5E\n", ind2, partiel);  }}void gener_BOUNDS(FILE *fc, long chunk_size, long *table_chunk, long *y,char *tampon[6], long Q, double C){fprintf(fc, "BOUNDS\n");for(ind1=1; ind1<=chunk_size; ind1++)  {  ind_pattern = table_chunk[ind1];  class1 = y[ind_pattern];  for(ind2=1; ind2<=Q; ind2++)    if(ind2 != class1)      {      fprintf(fc, " LO BOUND     A0%s%d  %lf\n",      tampon[indice_tampon(Q*(ind1-1)+ind2)], (Q*(ind1-1)+ind2), 0.0);      fprintf(fc, " UP BOUND     A0%s%d  %.6E\n",      tampon[indice_tampon(Q*(ind1-1)+ind2)], (Q*(ind1-1)+ind2), C);      }  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?