📄 mps.c
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -