[Cmpl] Conditional creation of variables

Thomas Schleiff t.schleiff at cmpl.de
Thu Nov 23 04:21:25 EST 2017


Hi Haroldo,

CMPL doesn't have any string functions beside concatenation. You cannot 
address a character within a string by indexing it.

If you want to address the single characters you must define it as 
single array elements. For instance:

VInteractions[,] := ( ("a", "u"), ("c", "g"), ("g", "c"), ("g", "u"), 
("u", "g"), ("u", "a") );

You can then query it like:

s[i] = VInteractions[k,1] && s[j] = VInteractions[k,2]

Thomas Schleiff



Am 22.11.2017 um 00:48 schrieb Haroldo Santos:
> Thanks a lot !!!
> Now I'm having a problem using a vector of strings.
>
> Apparently querying a vector of strings using
> *s[i] = VInteractions[k][1]
> *
> is not valid. I'm getting an error for the part in bold in the model. 
> Could you tell what I'm doing wrong ?*
> *
>
> parameters:
>
>   s[] := ("u", "c", "c", "a", "g", "c", "a", "g", "g", "a", "a", "a", 
> "g", "c");
>
>   Interactions := set( "au", "cg", "gc", "gu", "ug", "ua" );
>
>   VInteractions[] := ( "au", "cg", "gc", "gu", "ug", "ua" );
>
>   # weights for different interactions
>
> e[1..len(Interactions),1..len(Interactions)] :=
>
>    ( ( -1.1, -2.1, -2.2, -1.4, -0.9, -0.6 ),
>
>      ( -2.1, -2.4, -3.3, -2.1, -2.1, -1.4 ),
>
>      ( -2.2, -3.3, -3.4, -2.5, -2.4, -1.5 ),
>
>      ( -1.4, -2.1, -2.5, -1.3, -1.3, -0.5 ),
>
>      ( -0.9, -2.1, -2.4, -1.3, -1.3, -1.0 ),
>
>      ( -0.6, -1.4, -1.5, -0.5, -1.0, -0.3 ) );
>
> # penalty for pseudoknots, since there types
>
> # of interactions are less common in nature
>
>    sigma := 0.55;
>
>
>
> variables:
>
> # x[i,j]
>
>     { i in 1..count(s[])-1,j in 2..count(s[]), i<j && s[i]+s[j] << 
> Interactions : x[i,j] : binary; }
>
>
>
> # zx[i,j]
>
> { i in 1..count(s[])-3, j in 4..count(s[]), k in 1..len(Interactions), 
> l in 1..len(Interactions),
>
> j-i >= 3
>
> *&& s[i] = VInteractions[k][1] && s[j] = VInteractions[k][2] *
>
> **
>
> **&& s[i+1] = VInteractions[l][1] && s[j-1] = VInteractions[k][1] : 
> zx[i,j,k,l] : binary; }
>
>
> objectives:
>
> maxInteractions:
>
> sum{ i in 1..count(s[])-3, j in 4..count(s[]), k in 
> 1..count(Interations), l in 1..count(Interations), j-i >= 3
>
> && s[i]+s[j] << Interactions && s[i+1]+s[j-1] << Interactions : e[k,l] 
> * zx[i,j,k,l] } -> max;
>
>
> constraints:
>
>
>
>
> On Mon, Nov 20, 2017 at 8:44 AM, <mike.steglich at th-wildau.de 
> <mailto:mike.steglich at th-wildau.de>> wrote:
>
>     Hi Haroldo,
>
>     Please use << to test wheter an entry is an element of a set. Your
>     definition of the variables shout look like the following expression:
>
>     variables:
>
>     { i in 1..count(s[]),j in 1..count(s[]), i<j, s[i]+s[j] <<
>     interactions : x[i,j] : binary; }
>
>     Thanks,
>
>     Mike
>
>     *Von:* Cmpl [mailto:cmpl-bounces at coin-or.org
>     <mailto:cmpl-bounces at coin-or.org>] *Im Auftrag von *Haroldo Santos
>     *Gesendet:* Sonntag, 19. November 2017 20:22
>     *An:* cmpl at list.coin-or.org <mailto:cmpl at list.coin-or.org>
>     *Betreff:* [Cmpl] Conditional creation of variables
>
>     Hi,
>
>     I'm working with a computational biology problem where the input
>     is a string.
>
>     I would like to create variables for pairs of positions (i,j :
>     i<j) in this string where a matching is possible.
>
>     parameters:
>
>         s[] := ("u", "c", "c", "a", "g", "c", "a", "g", "g", "a", "a",
>     "a", "g", "c");
>
>         interactions := set( "au", "cg", "gc", "gu", "ug", "ua" );
>
>     variables:
>
>         { i in 1..count(s[]),j in 1..count(s[]), i<j && s[i]+s[j] in
>     interactions : x[i,j] : binary; }
>
>     The error appeared after I inserted && s[i]+s[j] in interactions 
>     .The intent of this part was to limit the creation of these
>     variables only for valid matches (specified in interactions).
>
>     Could someone tell me what is wrong ?
>
>     Thanks
>
>
>     -- 
>
>     =============================================================
>     Haroldo Gambini Santos
>     Computing Department
>     Universidade Federal de Ouro Preto - UFOP
>     email: haroldo [at ] iceb.ufop.br <http://iceb.ufop.br>
>     home/research page: www.decom.ufop.br/haroldo
>     <http://www.decom.ufop.br/haroldo/>
>
>
>     It has long been an axiom of mine that the little things are
>     infinitely
>     the most important.
>     -- Sir Arthur Conan Doyle, "A Case of Identity"
>
>
>
>
> -- 
> =============================================================
> Haroldo Gambini Santos
> Computing Department
> Universidade Federal de Ouro Preto - UFOP
> email: haroldo [at ] iceb.ufop.br <http://iceb.ufop.br>
> home/research page: www.decom.ufop.br/haroldo 
> <http://www.decom.ufop.br/haroldo/>
>
>
> It has long been an axiom of mine that the little things are infinitely
> the most important.
> -- Sir Arthur Conan Doyle, "A Case of Identity"
>
>
> _______________________________________________
> Cmpl mailing list
> Cmpl at list.coin-or.org
> https://list.coin-or.org/mailman/listinfo/cmpl


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/cmpl/attachments/20171123/d499451e/attachment.html>


More information about the Cmpl mailing list